【问题标题】:Array Representation of Polynomials多项式的数组表示
【发布时间】:2011-09-02 07:53:13
【问题描述】:

我正在阅读有关多项式的链表实现的信息。它表示,

Compare this representation with storing the same
polynomial using an array structure.
In the array we have to have keep a slot for each exponent
of x, thus if we have a polynomial of order 50 but containing
just 6 terms, then a large number of entries will be zero in
the array.

我想知道我们如何在数组中表示多项式?请指导我。

谢谢

【问题讨论】:

    标签: arrays linked-list


    【解决方案1】:

    基于数组的多项式的完整 Java 实现在这里:https://cs.lmu.edu/~ray/classes/dsa/assignment/2/answers/

    基本思想是,如果你有一个像这样的多项式

    4x^6-2x+5
    

    那么你的数组看起来像

       0     1    2    3    4    5    6
    +----+-----+----+----+----+----+----+
    | 5  |  -2 |  0 |  0 |  0 |  0 |  4 |
    +----+-----+----+----+----+----+----+
    

    那是

    • 系数 5 在数组的槽 0 中(代表 5x^0)
    • 系数 -2 在数组的槽 1 中(表示 -2x^1)
    • 系数 4 在数组的插槽 6 中(表示 4x^6)

    您可能会看到这种表示对于像这样的多项式是多么浪费

    3x^5000 + 2
    

    在这种情况下,您希望改为使用 稀疏数组 表示。最简单的方法是使用一个映射(字典),其键是指数,其值是系数。

    【讨论】:

      【解决方案2】:

      假设你的多项式是

      6x^50 + 4x^2 + 2x + 1
      

      您发布的段落描述了将其存储在这样的数组中:

      polynomial = new array(50)  // I'm assuming all elements initialize to zero
      polynomial[50] = 6
      polynomial[2] = 4
      polynomial[1] = 2
      polynomial[0] = 1
      

      基本上这样浪费了很多空间。这里的数组索引是 x 中多项式的 x 的“幂”。

      【讨论】:

        【解决方案3】:

        通常每个指数都有一个元素,所以多项式实际上是:
        poly[0]*x^0 + poly[1]*x^1 + ... + poly[n-1]*x^(n-1)

        例如。如果你有p(x) = 3x^5+5x^2+1,你的数组将是:

        poly[0] = 1
        poly[1] = 0
        poly[2] = 5
        poly[3] = 0
        poly[4] = 0
        poly[5] = 3
        

        【讨论】:

          【解决方案4】:

          如果你有类似的多项式函数

          3x^4 + x^2 + 2x + 1 = 0
          

          你可以在数组中表示它

          [1 2 1 0 3]
          

          所以,元素0是x^0的系数,元素1是x^1的系数……

          【讨论】:

          • 那么指数代表指数?这就是为什么我们需要表示所有项,即使它们不存在于多项式中的原因吗?
          • 没错。我认为这是在数组中表示多项式的最直观的方式。 :) 在多项式中“不存在”意味着它的系数为 0。因此您必须将其存储在数组的相应槽中。
          • 一般来说,您不必代表所有这些。如果多项式是稀疏的,请使用字典而不是数组。但是,您的问题询问如何使用数组。但是,根据定义,数组是连续的,所以如果你想要一个数组,你将需要零。
          猜你喜欢
          • 2021-05-23
          • 1970-01-01
          • 2013-02-25
          • 1970-01-01
          • 2018-10-28
          • 2017-06-19
          • 1970-01-01
          • 1970-01-01
          • 2015-12-01
          相关资源
          最近更新 更多