zoukankan      html  css  js  c++  java
  • 分治算法--求m的n次方

    分治算法技巧和原理:  https://blog.csdn.net/weixin_44489823/article/details/92799755

    这里假设m可以是个超大数, n也可以是个超大数。 所以用上 https://www.cnblogs.com/silentNight/p/13910510.html 里面的超大数相乘函数

    m的n次方: 如果n是偶数可以拆成 m的(n/2)次方乘以  m的(n/2)次方 ; 如果n是奇数可以拆成 m的([n-1]/2)次方乘以  m的([n-1]/2)次方  再乘以多出的那个m. 代码如下:

    vector<int> calPow(vector<int> val, int pow)
    {
        cout << "pow = " << pow <<endl;
    
        if (pow == 2)
        {
            vector<int> result =  mulVec(val, val);
    
            cout<<"result="; showV(result); cout<<endl;
    
            return result;
        }
    
        if (pow == 1)
        {
            return val;
        }
    
        /*分治算法*/
    
        //如果次方是偶数,比如2的4次方那么可以拆成2平方 * 2平方
        if (pow%2 == 0)
        {
            return mulVec( calPow(val,pow/2),  calPow(val,pow/2));
        }
    
        //如果次方是奇数,比如2的5次方那么可以拆成2平方 * 2平方 * 2
        return mulVec(  mulVec(calPow(val,(pow-1)/2),  calPow(val,(pow-1)/2)),     val );
    }
    
    void test_calMyPow()
    {
        vector<int> val;
        val.push_back(3);
        val.push_back(3);
        val.push_back(3);
    
        int pow = 19;
    
        vector<int> result = calPow(val, pow);
    
        cout << "finalResult ="; showV(result); cout<<endl;
    }

    分支算法的时间复杂度: https://blog.csdn.net/cutter_point/article/details/41172467

  • 相关阅读:
    Django 的中文教程
    VisualStudio code插件集锦(持续更新)
    Django3最新版本安装配置
    python 中的 *args 和 **kwargs
    拉格朗日乘子法
    softmax中的margin控制
    softmax中的smooth程度控制
    从boosting角度理解softmax
    从 smooth&最优化 角度理解softmax
    寻找 函数max(x, y) 的平滑解
  • 原文地址:https://www.cnblogs.com/silentNight/p/13915817.html
Copyright © 2011-2022 走看看