zoukankan      html  css  js  c++  java
  • 稀疏多项式的运算

    问题描述:

      已知稀疏多项式Pn(X)=c1x^e1+c2x^e2+....+cmx^em,其中n=em>em-1>....>e1>=0; ci!=0,m>=1.试采用存储量同多项式项数m成正比的顺序存储结构,编写求Pn(x0)的算法(x0为给定值),并分析你的算法的时间复杂度。

    问题分析:

    多项式的顺序存储结构为:

    Typedef struct {

    Int  coef;

    Int  exp;

    }PolyTerm;

    Typedef struct{

    PolyTerm  *data;

    Int  length;

    }SqPoly;//多看下,加深理解结构体

    什么叫做存储量同多项式项数m成正比的顺序存储结构?这意味着随着m的增大,存储量增加,好吧,这句话貌似没用。主要是求值了。看了代码后,挺容易理解的,自己还不知道这样做就行了。

     

    紧接着下一题是编写求P(x)=Pn1(x)-Pn2(x)的算法

    问题分析:

    这道题算是两个多项式的组合?差不多,刚开始想觉得很多没想到,你一旦你开始想,理清楚其中的细节,这道题也就解出来了。

    Status PolyMinus(SqPoly  &L,  SqPoly &L1, SqPoly  &L2)

    {

       PolyTerm  *p, *p1,*p2;

       P=L.data;

       P1=L1.data;

       P2=L2.data;

    Int i=0,j=0,k=0;

    While(i<L1.length&&j<L2.length)

    {

      If(p1->exp==p2->exp)

      {

          

            P->coxl=(p1->cox1)-(p2->coxl);

            P->exp=p1->exp;

            P1=p1->next; p2=p2->next;

            P=p->next;

            I++;  j++;k++;

           

      }

     Else 

     { 

       P->coxl=p1->coxl;

       P->exp=p1->exp;

       P=p->next;

       P1=p1->nextl

       I++;

       K++;

       P->cox1=-(p2->coxl);

       P->exp=p2->exp;

       P=p->next;

       P2=p2->nextl

       j++;

       K++; 

     }

    }

    L.length=k;

    Return ok;

    }

    //coxl也就是coef 我弄错了。

    //自己写的算法虽然实现了大概的功能,但是没考虑到顺序,以及两项相减后为0的情况,它会自动消失?还有当两个表的长度不相等时?While循环跳出来就执行完了吗?还要进一步判断呢。。这个可能还是要细分,也就是说我的这个算法,考虑的情况不多,分类讨论的思想是很重要的,高中的数学题很多就是需要分类讨论,这个思想要培养出来。

    参考书上的代码:

    Status PolyMinus(SqPoly  &L,  SqPoly &L1, SqPoly  &L2)

    {

       PolyTerm  *p, *p1,*p2;

       P=L.data;

       P1=L1.data;

       P2=L2.data;

       Int i=0,j=0,k=0;

       While(i<L1.length&&j<L2.length)

    {

      If((p1->exp)>(p2->exp))

      {

          P->coxl= - (p2->coxl);

          P->exp=p2->exp;

          p2=p2->next;

          P=p->next;

          j++;k++;

     }  

    Else

    {

        If((p1->exp)<(p2->exp))

        {

          P->coxl=(p1->coxl);

          P->exp=p1->exp;

          P1=p1->next;

          P=p->next;

          i++;k++;

         }  

        Else{

              If(p1->coxl!=p2->cox1)

              {

                P->coxl=(p1->cox1)-(p2->coxl);

                P->exp=p1->exp;

                P=p->next;

                k++;

              }

           P1=p1->next; 

           p2=p2->next;

           I++;  j++;

          }

    }//else

    }//while

    While(i<L1.length)

    {

          P->coxl=(p1->coxl);

          P->exp=p1->exp;

          P1=p1->next;

          P=p->next;

          i++;k++;

    }

    While(j<L2.length)

    {

          P->coxl= - (p2->coxl);

          P->exp=p2->exp;

          p2=p2->next;

          P=p->next;

          j++;k++;

    }

     

    L.length=k;

    Return ok;

    }

  • 相关阅读:
    达到XML简单的动态配置
    初步swift语言学习笔记9(OC与Swift杂)
    【COCOS2DX-对28游戏开发】 Cocos2d-x-3c 道路设计 CocosBase CocosNet CocosWidget
    无法识别的属性“targetFramework”。请注意属性名称区分大小写。
    IIS6.0服务器搭建网站无法访问解决方法
    IIS7授权错误:“无法验证对路径的访问”的解决方法
    如何在IIS6,7中部署ASP.NET网站
    IIS的安装与配置
    VS2010如何生成release文件
    发布网站
  • 原文地址:https://www.cnblogs.com/wj204/p/3044284.html
Copyright © 2011-2022 走看看