gcd算法在大数据符号方面的时间复杂度。

时间:2015-06-01 10:57:30

标签: algorithm time-complexity

这里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;
}

请帮忙。

2 个答案:

答案 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个数字是连续的斐波纳契数。