【练习3.7】编写一个函数将两个多项式相乘

本文探讨了多项式链表相乘的多种算法,包括O(M^2N^2)、O(M^2N)及O(MNlog(MN))时间复杂度的实现方案,分析了不同场景下算法选择的考量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载:https://www.cnblogs.com/catnip/p/4331347.html

【练习3.7】编写一个函数将两个多项式相乘,用一个链表实现。你必须保证输出的多项式按幂次排列,并且任意幂次最多只有一项。
a.给出以O(M2N2)时间求解该问题的算法。

一种算法是将结果保存在按指数排序的链表中。每个mn乘法都需要搜索链表中的重复项。由于链接列表的大小为mn,因此总运行时间为O(m 2 n2)。

b.写一个以O(M2 N)时间执行乘法的程序,其中M≤N。

M≤1时,方法易知。
M≥2时,每次将长度为M的链表的一项,与另一链表的所有项相乘,每次一组N个有序的多项式元素。
对于每两组上式的N个多项式元素,基本按两个有序链表求并的算法(除幂次相同需将系数相加)操作。
求并算法时间复杂度O(M+N),故该算法复杂度为(乘法时间)O(MN)+(求并时间)O((N+N)+(2N+N)+(3N+N)+……+(MN+N))=O(M2N)

c.写一个以O(MNlog(MN))时间执行乘法的程序。

同a先将两链表元素两两相乘并列出,对MN项元素进行O(NlogN)的排序
排序完成后,遍历代码,合并同幂次项,最后全部插入链表。
时间复杂度为:(乘法时间)O(MN)+(排序时间)O(MNlogMN)+(合并同类项时间)O(MN)=O(MNlogMN)

d.上面哪个时间界最好?

算法的选择取决于m和n的相对值。如果它们接近,那么(c)部分的解决方案更好。如果一个多项式非常小,那么解决方案为:(b)部分更好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值