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;
    }

  • 相关阅读:
    leetcode Super Ugly Number
    leetcode Find Median from Data Stream
    leetcode Remove Invalid Parentheses
    leetcode Range Sum Query
    leetcode Range Sum Query
    leetcode Minimum Height Trees
    hdu 3836 Equivalent Sets
    hdu 1269 迷宫城堡
    hud 2586 How far away ?
    poj 1330 Nearest Common Ancestors
  • 原文地址:https://www.cnblogs.com/guojidong/p/2833026.html
Copyright © 2011-2022 走看看