algorithm - 如何计算DFS算法的时间复杂度?

标签 algorithm

像下面的函数,如何计算它的时间复杂度?我认为应该是 O(m*n)...

int uniquePaths(int m, int n) {
    if (m < 1 || n < 1) return 0;     
    if (m == 1 && n == 1) return 1;      
    return uniquePaths(m - 1, n) + uniquePaths(m, n - 1);
}

最佳答案

您可以使用递归函数 T(m,n) = T(m-1, n) + T(m, n-1) 对时间复杂度进行建模,其中T(1,1)=1T(m,n)=0每当min(m,n)<1 .

看起来像T(m,n)=(m+n choose m) 。看到这个说明(m+n choose n) = (m+n-1 choose m) + (m+n-1 choose m-1)recurrence for the binomial coefficients ,以及T(m,n) = T(m-1, n) + T(m,n-1)是完全相同的重复。

因此T(m,n) = O((m+n)^n / n!) 。 (有many other bounds。)

关于algorithm - 如何计算DFS算法的时间复杂度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36386237/

相关文章:

python - 随机数算法

algorithm - 平衡二叉树访问

algorithm - 生命游戏中合法的前一步步数

javascript - 如何在 JavaScript 中有效地将大块分割为许多大小为 2 的小块

添加节点的效果未知时寻找最便宜路径的算法

algorithm - 对二维数组进行二分搜索以找到局部最大值?这个算法有什么问题?

c# - 动态创建路线图

algorithm - 如何通过循环查找找到最小生成树?

java - Level Order tree 遍历通用树,逐层显示树

algorithm - 矩形网格算法中转弯最少的路径