用平方算法证明指数乘法次数

时间:2017-10-05 05:08:55

标签: algorithm recursion code-analysis induction

我试图找到执行算法所需的乘法次数,该算法使用Squaring的Exponentiation我在Wikipedia上阅读。计算复杂性一节提到该算法最多需要floor(log n)。我怎么能证明这一点?

我有这个伪代码:

expo(a, n)
    if n == 0 
       return 1
    if n == 1 
       return a
    if n is even
        b = expo(a, n/2)
        return b*b
    return a * expo(a, n-1)

有了这个,我也有以下关系

Number of multiplications = T(n)

T(n) = 0 if n<2; a*a^(n-1) if n is odd; (a^(n/2))^2 is n is even

我尝试使用表示需要完成的base,a和注意二进制操作的位串。即5 = 101_2。所有1都需要反相,然后向右移位。所有0都只需要向右移位。然后,这些操作可以表示乘法,如我生成的图表所述:

exponent n                 0  1  2  3  4  5  6  7  8  
bits in n                  1  1  2  2  3  3  3  3  4  
0-bits in n                1  0  1  0  2  1  1  0  3
1-bits in n                0  1  1  2  1  2  2  1  1 
binary operations for a^n  0  0  1  2  2  3  3  4  3
multiplications for a^n    0  0  1  2  2  3  3  4  3

修改

正如Henry在下面的评论中所指出的,可以使用# of bits in binary representation + # of 1 bits in binary representation - 1找到乘法的次数。为了防止在数学中迷失,我将假设1位的数量由某个函数b(n)给出。然后,T(n) = floor(log_2 n) + b(n) - 1

证明n = 2

2_10 = 10_2 -> b(2) = 1

-> T(2) = floor(log_2 2) + b(2) - 1 = 1 + 1 - 1 = 1

这与上面的观察表一致。

假设为k。

证明k + 1:

T(k+1) = floor(log_2 (k+1)) + b(k+1) - 1

在这个公式之后,就k + 1而言,我不太清楚该怎么做。我很感激任何见解。

0 个答案:

没有答案