我试图想出斯坦因算法(二进制GCD算法)的递推关系,但是我通过它追踪的能力证明不是从头开始的。斯坦因算法的最坏情况输入是什么?
我完全被多重路径和递归调用所困扰,以及我们正在处理的总位数代表我们的值而不是值本身。
这里的算法:
stein(u, v):
if either of u or v are 0: return their sum.
if either of u or v are 1: return 1.
if both u and v are even: return 2 * stein(u/2, v/2)
if u is even and v is odd: return stein(u/2, v)
if u is odd and v is even: return stein(u, v/2)
if both u and v are odd: return stein(larger-smaller/2, smaller)
我试图找到递推关系T(n),其中n是同时代表u和v我觉得这里的第一步所需的位的总数。对于我来说,应该在最糟糕的情况下发挥作用。
我认为每个除法操作都会将位数减1,但这是我迄今了解最多的。
我试过跟踪算法,但无济于事。我还阅读了Knuth Vol。的相关部分。 2但我认为这有点超出了我理解的范围,因为它对我来说没有意义。
2^n总是偶数。你想要像v'= v * 2 + 3 –
@ Jean-BernardPellerin我忽略了减法成本O(n)。有了这种观察,这种情况肯定是最糟糕的,你是对的。 – Patrick87