AcWing
  • 首页
  • 题库
  • 题解
  • 分享
  • 问答
  • 活动
  • 应用
  • 吐槽
  • 登录/注册

DFS时间复杂度



1


想请教下各位dfs复杂度是如何分析的呀
比如下面这段代码
假设cal(i)是O(1)的,那这个dfs的复杂度是多少呢

void dfs(int step, int sum)
{
    if(step == n)
    {
        ans = max(ans, sum);
        return;
    }
    for(int i = 0; i < n; i ++)
    {
        if(!vis[i])
        {
            int tmp = r[i];
            if(!cal(i)) r[i] = 0;
            vis[i] = true;
            dfs(step + 1, sum + r[i] * r[i]);
            vis[i] = false;
            r[i] = tmp;
        }
    }
}


提问于2天前
生日快乐
551


2 个问答



0

遍历了多少个元素,时间复杂度就是多少

回答于2天前
f4u4u4r
80

十分感谢 –  生日快乐   2天前



-1

可参考 842. 排列数字

你的代码和这道题的解法有异曲同工之妙,可以先看看题解

这个代码的复杂度就是上题的复杂度,上题求的是n个数里选n个数,排列数量为 $n!$

由于每条排列有n个数,总复杂度就是 $\mathcal{O}(n\times n!)$,即遍历到这么多状态

回答于2天前
wx090708
9817

十分感谢 –  生日快乐   2天前


我来回答
你确定删除吗?

© 2018-2021 AcWing 版权所有  |  京ICP备17053197号-1
联系我们  |  常见问题
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息