分治算法求解实数幂问题:时间复杂度O(log n)
- 伪代码描述:
Power(x, n):
if n = 0:
return 1
if n = 1:
return x
if n < 0:
return 1 / Power(x, -n)
if n is even:
half = Power(x, n / 2)
return half * half
else:
half = Power(x, (n - 1) / 2)
return half * half * x
- 关键操作是递归计算幂的一半。
- 运行时间T(n)的递推方程:
T(n) = T(n/2) + O(1)
其中O(1)表示常数时间的乘法操作。这是因为每次递归都将问题规模减半,直到问题规模为1。所以总共需要进行log(n)次递归调用,每次调用的时间复杂度为O(1)。所以总的时间复杂度为O(log(n))。
原文地址: https://www.cveoy.top/t/topic/pxgY 著作权归作者所有。请勿转载和采集!