配置文件
“关于回溯算法的复杂性,网络上的资料很混乱。 一些所谓的经典面试书不用回溯算法。 算法书也避开了这一点,感觉就像算法中的模糊边界”。
“所以,这是我个人理解,对内容持开放态度,集思广益,欢迎大家讨论! " "
以下过程计算空间复杂性时,将计算系统堆栈(不是数据结构中的堆栈)所占用的空间。
子集问题分析:
时间复杂度: o(n*2n )不取各元素的状态,所以时间复杂度为o ) 2n ),需要嵌入数组才能构建各子集,并且需要o ) n ),最终时间复杂度: o ) n
空间复杂度: o(n ),因为递归的深度为n,所以系统堆栈使用的空间为o ) n ),各层递归使用的空间为常数水平。 请注意,代码中的result和path是全局变量。 即使放入自变量,被传递的也是参照,并不是新申请存储器空间,最终空间复杂度为o ) ) n ) )。
列举问题分析:
时间复杂性: o(n )! 可见,这一点从数组的树视图中可以清楚地看到,每层的节点是n,第二层的每一个分支伸展n-1个分支,下面伸展n-2个分支,所以到叶的节点一共是n * n-1 * n-2 * … 1=n!
空间复杂性: o(n )与子集问题相同。
组合问题分析:
时间复杂度:由于o(n*2^n )的组合问题其实是种子集问题,所以组合问题的最坏情况也不会超过子集问题的时间复杂度。
空间复杂性: o(n )与子集问题相同。
n皇后问题分析:
时间复杂性: o(n )! 是。 实际上,看树形图的话,直观上是o(n^n ),但是因为皇后之间不能见面,所以在检索中会有剪枝。 最糟糕的是o ) n!n! 表示n*(n-1 )…*1。
空间复杂性: o(n )与子集问题相同。
数独问题分析:
时间复杂度: o(9^m ),m为’.’的数。
空间复杂度: o(n2 ),递归深度为n2
“一般来说,回溯算法的复杂性是指数时间的复杂性,这也是摘要吧。 " "