扩展欧几里得算法的位复杂度是多少?

时间:2019-02-21 12:18:32

标签: algorithm recursion time-complexity big-o

使用Euclids扩展算法计算两个n位值x和y的最大公约数时所涉及的位复杂度是多少,即n的复杂度

在最坏的情况下,对于不同的位大小,我在使用标准扩展Euclid算法计算GCD时观察到以下模式。 enter image description here

就两个值x和y的大小而言,复杂度接近于值:

enter image description here

Source

如何得出理论上的位复杂度来验证我的观察结果?

1 个答案:

答案 0 :(得分:4)

我希望您能适应高峰,因为您正在寻找最坏情况下的复杂性。

反正...

如果 a b 长为 N 位,则在最坏的情况下(斐波纳契对),扩展的欧几里得算法将花费< strong> O(N)次迭代。

f(N)为一次迭代的成本。当然, f(N)将至少是线性的,但仍是多项式,并且在每种情况下,几乎一半的迭代将包含至少 N / 2 位长的参数,因此总复杂度将为 O(f(N)log N)

现在, f(N)的确切含义将取决于您的库中如何实现大整数操作。除法/余数运算将占主导地位,尽管维基百科说,如果使用牛顿-拉夫森除法,则其复杂度与乘法相同(尽管肯定会有一个常数乘数!)。

在Schönhage–Strassen的限制中,乘法成本 O(N * log N * log log N),希望您的图书馆最终会使用它,所以当数字确实大,在最坏的情况下,扩展的欧几里得算法应采用 O(N * log ^ 2 N * log log N)