这里n> m。 我分析了当n =斐波纳契第N项和m =斐波那契(N-1)项时的最坏情况。在这种情况下,总工作将与N成比例或时间复杂度将为O(N)。但我有兴趣寻找时间复杂度(theta表示法)用n来表示。但我没有得到如何找到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;
}
请帮忙。
答案 0 :(得分:0)
我会尝试分析循环的两次迭代后m的变化情况。一次迭代可能很少变化,例如(1001,1000) - > (1000,1)。 m也可能变化很小,例如(1999,1000) - &gt; (1000,999)。因此,分析单个迭代中的任何一个变化对您的影响非常小。但是,如果您有两次迭代,那么您将始终有一个很大的变化。
所以分析一下:如果r = n / m,那么在算法的两次迭代后m如何变化,这取决于r?它至少会减少哪个因素? (顺便说一句,斐波纳契数的r是什么?这能解释最坏的情况吗?)
答案 1 :(得分:0)
您可能会发现this很有趣。
它试图解释Lamé定理GCD算法的步数。最糟糕的情况是2个数字是连续的斐波纳契数。