欧几里德GCD算法的运行时间?

时间:2012-01-30 07:49:06

标签: algorithm time-complexity

我正在尝试通过阅读CLR算法书来学习RSA密码学的数论。我正在看练习31.2-5,声称1 + log Φ(b / gcd(a,b))的界限。

完整的问题是:

如果是> b> = 0,表明调用EUCLID(a,b)最多生成1 + log Φ b递归调用。将此限制改为1 + log Φ(b / gcd(a,b))。

有谁知道如何展示这个?欧几里德的算法在这个网站上已经有其他几个问题和答案,但是它们似乎都没有这个确切的答案。

3 个答案:

答案 0 :(得分:2)

请参阅Donald Knuth对Euclid算法的分析, TAOCP Vol.2 p.356

答案 1 :(得分:1)

这就是我解决第一部分的方法。我还在继续第二次

我们知道Euclid算法的运行时是所涉及步骤数的函数(本书的第pg页) 设k是所需的递归步数。     因此,b> = F k + 1> =φk-1     b> =φk-1 记录找到我们的k     Logφb> = k-1      1 +Logφb> = k 因此运行时间为O(1 +Logφb)

答案 2 :(得分:1)

  1. 如果Euclid(a,b)步数超过N,则显示 a>=F(n+1)b>=F(n),其中F(i)i斐波那契 数。
    这可以通过Induction轻松完成。

  2. 再次显示F(n)≥φ n-1     诱导。

  3. 使用步骤1和2的结果,我们有b≥F(n)≥     φ n-1
    以两侧的对数为准,     log φb≥n-1。

    因此证明,n≤1+     日志<子>φ B'/ p>

  4. 第二部分通常如下 EUCLID(ka,kb)中的递归调用次数与EUCLID(a,b)中的递归调用次数相同,其中k是一个整数。

    因此,边界被改进为1 + log φ(b / gcd(a,b))。