美文网首页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