时间复杂度为log(b)的a ^ b的非递归算法

时间:2017-03-04 17:00:01

标签: math time-complexity

有一个项目,我应该实现功率算法(a,b)产生一个^ b,算法应该具有log(b)的复杂度(b是函数中的第二个输入数字)和算法也应该是非递归的。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

想法是用正方形和乘法构造所需的乘法

让我们从一个具体的例子开始:7 ^ 13

13是二进制的1101

所以7*((7^2)^2*((7^2)^2)^2)=7^(1+4+8)=7^13

从算法:

  1. 设x = a,res = 1
  2. 查看从小到大的b
    1. 如果当前位为1,则res = res * x
    2. X = X * X
  3. 时间复杂度与b的位数相同,即log(b)