zoukankan      html  css  js  c++  java
  • 使用分治算法提高多项式计算效率:

    #include <IOSTREAM>

    using namespace std;

    //只有两项直接计算
    void product(float p[],float q[],float c[]){
        c[0] = p[0]*q[0];
        c[2] = p[1]*q[1];
        c[1] = (p[0] + p[1])*(q[0] + q[1]) - c[0] - c[2];
    }

    //两个具有n项系数的多项式相加
    void plus(float p[],float q[],float c[],int n){
        int i;
        for (i=0;i<n;i++)
        {
            c[i] = p[i] + q[i];
        }
    }

    //两个具有n项系数的多项式相减
    void mins(float p[],float q[],int n){
        int i;
        for (i=0;i<n;i++)
        {
            p[i] = p[i] - q[i];
        }
    }

    //p和q是多项式系数数组,系数为n项,注意n必须为2的某次幂
    void poly_product(float p[],float q[],float r0[],int n){
        int k,i;
        float *r1,*r2,*r3,*r4;  //r3是一个辅助数组
        r1 = new float[2*n - 1];
        r2 = new float[2*n - 1];
        r3 = new float[2*n - 1];
        r4 = new float[2*n - 1];
       
        for (i=0;i<2*n - 1;i++)
        {
            r0[i] = r1[i] = r2[i] = r3[i] = 0;   //递归算法使用指针传递参数时需要把初始值改为0
        }
       
        if (n==2)
        {
            product(p,q,r0);
        }else
        {
            k = n/2;
            poly_product(p,q,r0,k);  //计算r0
            poly_product(p+k,q+k,r1+2*k,k);  //计算r1
           
            plus(p,p+k,r4,k);      //计算p0 + p1
            //    plus(p,p+k,r2+k,k);   //计算p0 + p1
            plus(q,q+k,r3,k);      //计算q0 + q1
            //poly_product(r2+k,r3,r2+k,k);   //递归计算r2  ,这一步出现BUG了
            poly_product(r3,r4,r2+k,k);
            mins(r2+k,r0,2*k - 1);
            mins(r2+k,r1+2*k,2*k - 1);
            plus(r2+k,r0+k,r0+k,2*k - 1);
            plus(r1+2*k,r0+2*k,r0+2*k,2*k - 1);
           
           
        }
       
        delete r1;
        delete r2;
        delete r3;
        delete r4;
    }

  • 相关阅读:
    java小白学习练手成绩管理系统(一)
    java初级学习练手成绩管理系统(四)
    Echart可视化学习集合
    java小白学习练手成绩管理系统(六)
    java小白学习练手成绩管理系统
    网页内容加密
    Ubuntu 10.04 安装配置指南
    Linux目录解释
    完整清除XP垃圾文件系统自带的秘密武器
    人人都应该掌握的一些电脑操作技巧
  • 原文地址:https://www.cnblogs.com/guojidong/p/2833026.html
Copyright © 2011-2022 走看看