多项式的数组表示

时间:2011-09-02 07:53:13

标签: arrays linked-list

我正在阅读关于多项式的链表实现。它说,

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.

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

由于

4 个答案:

答案 0 :(得分:4)

基于数组的多项式的完整Java实现在这里:http://www.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

在这种情况下,您需要使用稀疏数组表示。最简单的方法是使用一个map(字典),其键是exponoents,其值是系数。

答案 1 :(得分:1)

假设你的多项式是

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的“幂”。

答案 2 :(得分:1)

通常你为每个指数保留一个元素,所以多项式实际上是:
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

答案 3 :(得分:1)

如果你有像

那样的多项式函数
3x^4 + x^2 + 2x + 1 = 0

您可以在数组中将其表示为

[1 2 1 0 3]

因此,元素0是x ^ 0的系数,元素1是x ^ 1的系数,依此类推......