计算 x^n 时间复杂度为O(long N)的算法

计算 xn 很容易, 直接用一个 for 循环就就可以实现:

double pow(double x, int n)
{
    int i;
    for (i=0; i<n; i++){
        x *= x;
    }
    
    return x;
}

今天在百度上发现了一个更快的算法, 它的时间复杂度是 O(long N)

double pow(double x, int n)
{
    double temp = x;
    double result = 1;
    
    while (n){
        if (n%2){
            result = result * temp;
        }
        n = n / 2;
        temp *= temp;   // 循环次数:temp的值 1:x^2, 2:x^4, 3:x^8……;
    }
    
    return result;
}

思路:假如要计算35; 先可以将 5 转换成二进制为 101; 而 101 = (22+21);
所以:35 = 3(22+21) = 34 * 31

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容