1.介绍

在数学中,多项式是包含一个或多个变量中的功率之和乘以系数的表达式。一个变量中的多项式,X,恒定系数就像:a_0 + a_1x + a_2x ^ 2 + ... + a_ {n-1} x ^ {n-1} + a_nx ^ n。我们称每个项目称为,例如,a_nx ^ n, 一个条件。如果两个术语具有相同的权力,我们会像术语一样称呼它们。

在本教程中,我们将展示如何使用链接列表数据结构添加和乘以两个多项式。

2.代表具有联系列表的多项式

我们可以使用一个链接名单代表多项式。在链接列表中,每个节点有两个数据字段:系数和电源。因此,每个节点表示多项式的术语。例如,我们可以代表多项式2-4x + 5x ^ 2有链接列表:

我们可以排序链接列表o(n \ log n)时间,哪里N是链接列表节点的总数。在本教程中,我们将假设链接列表由用于我们算法简单的功率排序。

3.添加两个多项式

要添加两个多项式,我们可以添加相同术语的系数,并为所得到的多项式生成新的链接列表。例如,我们可以使用两个喜欢的列表来表示多项式2-4x + 5x ^ 21 + 2x  -  3x ^ 3

当我们将它们添加在一起时,我们可以分组类似的条款并生成结果3 - 2x²+ 5x²- 3x^3

由于两个链接列表由电源订购,因此我们可以使用双指针方法来合并两个排序链接列表:

QuickLatex.com呈现

在该算法中,我们首先创建两个指针,P1P2.,到两个输入多项式的头部指针。然后,我们基于这两个指针的功率生成新的多项式节点。有三种情况:

  1. P1力量大于P2.'的力量:在这种情况下,我们将一个新节点附加P1的力量和系数。此外,我们搬家了P1到下一个节点。
  2. P2.力量大于P1'的力量:在这种情况下,我们将一个新节点附加P2.的力量和系数。此外,我们搬家了P2.到下一个节点。
  3. P1P2.具有相同的力量:在这种情况下,新系数是总共P1的系数和P2.的系数。如果新系数不是0.,我们附加一个具有相同幂次和新的系数的新节点。另外,我们两个都搬P1P2.到下一个节点。

之后,我们继续从中追加剩余节点P1或者P2.直到我们完成所有节点的计算。

附加函数可以基于输入创建新的链接列表节点力量系数。此外,它将新节点附加到尾巴节点并返回新的尾巴节点:

QuickLatex.com呈现

此算法仅遍历每个链接列表节点一次。因此,整体运行时间是o(n + m), 在哪里Nm是两个输入多项式的术语数。

4.乘以两个多项式

为了乘以两个多项式,我们可以首先将一个多项式的术语乘以另一个多项式。假设两个多项式有Nm条款。这个过程将创建多项式n \ times m条款。

例如,在我们繁殖后2-4x + 5x ^ 21 + 2x  -  3x ^ 3,我们可以获得链接列表:

此链接列表包含要生成最终结果所需的所有术语。但是,它不是由权力排序的。此外,它包含与术语相同的重复节点。要生成最终链接列表,我们可以先归并排序基于每个节点的电源的链接列表:

在排序之后,等术语节点被分组在一起。然后,我们可以合并每组类似术语并获得最终的乘法结果:

我们可以使用算法描述这些步骤:

QuickLatex.com呈现

在这个算法中,我们首先使用嵌套尽管循环乘以两个多项式的所有术语对。这需要o(nm)时间,哪里Nm是两个输入多项式的术语数。此外,此过程创建了链接列表n \ times m节点。

然后我们合并排序链接列表基于每个节点的功率。这个过程需要o(nm \ log(nm))时间。

对链接列表进行排序后,我们可以使用双指针方法合并术语:

QuickLatex.com呈现

在这种方法中,我们使用一个指针作为类似术语组的开始,并使用另一个指针来遍历同一组中的术语。每次找到一项术语时,我们都会将其系数添加到开始时术语节点。一旦我们完成一个术语组,我们将开始指针移动到下一个组,并重复相同的进程以合并术语。这个过程的运行时间是o(nm)我们需要访问n \ times m节点。

总的来说,运行时间是O(nm)+ o(nm \ log(nm))+ o(nm)= o(nm \ log(nm))

结论

在本教程中,我们展示了如何表示具有链接列表数据结构的多项式。此外,我们展示了两个算法,用于添加和乘以多项式的两个链接列表表示。

来宾
0.注释
内联反馈
查看所有评论