美文网首页C语言数据结构
计算 x^n 时间复杂度为O(long N)的算法

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

作者: tingshuo123 | 来源:发表于2017-07-01 17:26 被阅读22次

计算 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

相关文章

网友评论

    本文标题:计算 x^n 时间复杂度为O(long N)的算法

    本文链接:https://www.haomeiwen.com/subject/zhqgcxtx.html