在我准备算法课的期中导论时,我正在浏览教授之前发布的一些测试,我发现了一个问题:
计算gcd(312455)有两种方法:找到每个数的因式分解,并使用euclid算法。每种方法的复杂性是什么?
他的回答是:

gcd(455,312) = gcd(312,143) = gcd(143,26) = gcd(26,13) = gcd(13,0) = 13

factors(312)= {2, 3, 13} factors(455)= {5, 7, 13}

复杂性:
gcd-log(n)
因素-sqrt(n)
他是如何达到复杂性的呢?

最佳答案

要分析欧几里德GCD,必须选择最坏情况值:我个人发现斐波那契对最适合这个问题。例如。

EGCD(121393, 75025) = 1; // With 24 iterations (or recursive calls).

看看这个“序列”:
对于斐波那契对,我们注意到:
121393 % 75025 == 121393 - 75025 == 46368.

因此,存在一个121393 / 46368 = **2.61** (more or less);
当然,最坏情况下的运行时间将使用小的Oh表示法,因为最好的情况将采用ω(1),换句话说就是常数时间,例如,当被除数为1000,除数为2时。
由于我们有一个递减因子,我们可以把递归关系设为如下:
您必须知道,这个运行时间与EGCD算法的迭代版本完全相同。

10-04 21:59
查看更多