algorithm - gcd 算法在大 theta 符号方面的时间复杂度。

标签 algorithm time-complexity

这里 n>m。 我分析了最坏的情况,当 n = fibonacci Nth term 和 m = fiboncci (N-1)th term.In this case total work will be proportinal to N or time complexity will O(N).但我有兴趣找到以 n 表示的时间复杂度(theta 表示法)。但我不知道如何找到 n 和 N 之间的关系,或者以 n 表示的上限和下限。

int gcd(int n, int m) {
        if (n%m ==0) return m;
        if (n < m) swap(n, m);
        while (m > 0) {
            n = n%m;
            swap(n, m);
        }
        return n;
}

请帮忙。

最佳答案

我会尝试分析两次循环后 m 的变化情况。一次迭代可能对 n 的改变很小,例如 (1001, 1000) -> (1000, 1)。 m 也可能变化很小,例如 (1999, 1000) -> (1000, 999)。因此,分析单次迭代中的任何一种变化对您的帮助都非常小。然而,如果你有两次迭代,那么你总是会有很大的变化。

所以分析一下:如果 r = n/m,在算法两次迭代后 m 如何变化,取决于 r?它至少减少了哪个因素? (顺便说一句,斐波那契数的 r 是多少?这是否解释了最坏的情况?)

关于algorithm - gcd 算法在大 theta 符号方面的时间复杂度。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30571718/

相关文章:

arrays - 通过重复删除第一个和中间、第一个和最后一个或中间和最后一个元素来清空数组的最小成本

迭代计算数字倒数的算法

java - 在二维数组中的值的边界周围检测相同的值

algorithm - 在线性时间内使用红色/蓝色边缘着色的图中恰好使用 k 条红色边缘查找生成树

java - 打印给定数字的所有唯一因子组合

java - arraylist 操作按索引添加和删除的运行时

python - 为什么这个循环会随着时间的二次方缩放

c++ - 解释这些分组函数的时间复杂度

c++ - 降低程序的复杂度

c - 骑士游算法C实现性能