• 数组与链表算法-数组与多项式


    目录

    数组与链表算法-数组与多项式

    多项式数组表达式

    C++代码


    数组与链表算法-数组与多项式

    多项式是数学中相当重要的表达方式,如果使用计算机来处理多项式的各种相关运算,那么通常使用数组或链表来存储多项式。

    多项式数组表达式

    假如一个多项P(X) = a_{n}X^{n} + a_{n-1}X^{n-1} + ... + a_{1}X + a_{0},这个多项式P(X)就被称为n次多项式。一个多项式如果使用数组结构存储在计算机中的话,表示法有以下两种:

    (1)使用一个n+2长度的一维数组来存放,数组的第一个位置存储多项式的最大指数n,数组之后的各个位置从指数n开始,依次递减按序存储对应项的系数:

            P = (n, a_{n}, a_{n-1}, ... , a_{1}, a_{0})

    存储在A(1:n+2)中,例如P(X) = 2X^{5} + 3X^{4} + 5X^{2} + 4X + 1,可转换为A数组来表示,例如:

            A = [5, 2, 3, 0, 5, 4, 1]

    使用这种表达法的优点是在计算机中运用时,对于多项式各种运算(如加法与乘法)的设计比较方便。不过,如果多项式的系数为多半为零,例如X^{100}+1,就太浪费内存空间了。

    C++代码

    1. #include
    2. using namespace std;
    3. void PolySum(int* arrA, int* arrB, int* arrResoult) {
    4. arrResoult[0] = arrA[0];
    5. for (int i = 1; i < arrA[0] + 2; i++) {
    6. arrResoult[i] = arrA[i] + arrB[i];
    7. }
    8. }
    9. void PrintPoly(int* arr) {
    10. int MaxExp = arr[0];
    11. for (int i = 1; i < arr[0] +2; i++) {
    12. if (arr[i] != 0) {
    13. if (MaxExp != 0)
    14. cout << arr[i] << "X^" << MaxExp << " ";
    15. else
    16. cout << arr[i];
    17. if (MaxExp - 1 >= 0)
    18. cout << " + ";
    19. }
    20. MaxExp--;
    21. }
    22. cout << endl;
    23. }
    24. int main() {
    25. int* PolyA = new int[]{ 4,3,7,0,6,2 };
    26. int* PolyB = new int[]{ 4,1,5,2,0,9 };
    27. int* PolyResoult = new int[PolyA[0]+2] {0};
    28. cout << "多项式A:";
    29. PrintPoly(PolyA);
    30. cout << "多项式B:";
    31. PrintPoly(PolyB);
    32. PolySum(PolyA, PolyB, PolyResoult);
    33. cout << "A + B = ";
    34. PrintPoly(PolyResoult);
    35. return 0;
    36. }

    输出结果

    (2)只存储多项式中的非零项。如果有m个非零项,就使用2m+1长的数组来存储每一个非零项的指数及系数,但数组的第一个元素存储的是这个多项式非零项的个数。

    例如P(X) = 2X^{5} + 3X^{4} + 5X^{2} + 4X + 1,可表示成A(1:2m+1)数组,如下所示:

            A = \left \{ 5, 2, 5, 3, 4, 5, 2, 4, 1, 1, 0 \right \}

    这种方法的优点是在多项式零项较多时可以减少对内存空间的浪费,但缺点是在为多项式设计各种运算时会复杂许多。

    使用多项式的两种数组表示法来存储多项式P(X) = 8X^{5} + 7X^{4} + 5X^{2} + 12,结果如下:

    • P = (5, 8, 7, 0, 5, 0, 12) 
    • P = (5, 8, 5, 7, 4, 5, 2, 12, 0)

    注意,在上面这个例子中,第二种数组表示法并没有体现出减少对内存空间的浪费的优点,这是因为多项式P(X)的零项并不多,只是缺了X^{3}X这两项。

  • 相关阅读:
    批量图片转文字识别OCR身份证件信息提取软件
    设计模式——状态模式19
    TVP 专家谈腾讯云 Cloud Studio:开启云端开发新篇章
    【快应用】如何使用命令打包快应用rpk
    【数据结构】带头结点的单链表的头插法
    存储大实验,游戏A Slower Speed of Light的开发
    在Ubuntu上搭建幻兽帕鲁服务器
    Jekyll 的机制、转换步骤和结构介绍
    [运维|中间件] 东方通TongWeb使用笔记
    OneNote如何修改已有的笔记本为默认的快速笔记?
  • 原文地址:https://blog.csdn.net/qq_40660998/article/details/134059342