我正在尝试得出Stein算法(二进制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的相关部分,但我认为它有点超出了我当前的理解范围,因为我觉得它没有什么意义。