【问题标题】:What is the bit complexity of Extended Euclid Algorithm?扩展欧几里得算法的位复杂度是多少?
【发布时间】:2019-07-15 08:33:48
【问题描述】:
使用欧几里得扩展算法计算两个 n 位值 x 和 y 的最大公约数时所涉及的位复杂度是多少,即以 n 表示的复杂度
我在使用标准扩展欧几里得算法计算 GCD 时观察到以下模式,在最坏的情况下不同位大小。
就 x 和 y 两个值的大小而言,复杂度接近该值:
Source
如何得出理论上的位复杂度来验证我的观察结果?
【问题讨论】:
标签:
algorithm
recursion
time-complexity
big-o
【解决方案1】:
我希望你能适应高峰,因为你正在寻找最坏情况的复杂性。
无论如何...
如果 a 和 b 的长度为 N 位,那么在最坏的情况下(斐波那契对),扩展欧几里得算法将采用 O(N) 次迭代。
令 f(N) 为单次迭代的成本。当然 f(N) 将至少是线性的,但仍然是多项式的,并且每种情况下近一半的迭代将涉及至少 N/2 位长的参数,所以总复杂度将在 O(N * f(N))
现在,f(N) 究竟是什么将取决于您的库中如何实现大整数运算的细节。除法/余数运算将占主导地位,尽管维基百科说如果您使用牛顿-拉夫森除法,那么其复杂性与乘法相同(尽管肯定会有一个常数乘数!)。
乘法成本 O(N * log N * log log N) 在 Schönhage–Strassen 的限制中,希望您的图书馆最终会使用它......所以当数字得到 真的很大,扩展欧几里得算法最坏的情况应该是O(N2 * log N * log log N)。