例如3x^4-17x^2-3x+5。多项式的每一项都可以表示为一对整数(系数、指数)。多项式本身就是这样的对的列表,如[(3,4), (-17,2), (-3,1), (5,0)]
对于所示的多项式。
零多项式0表示为空列表[]
,因为它没有系数为非零的项。
我想写两个函数,用元组(系数,指数)的相同表示来相加和相乘两个输入多项式:
addpoly(p1, p2)
multpoly(p1, p2)
测试用例:
addpoly([(4,3),(3,0)], [(-4,3),(2,1)])
应该给出[(2, 1),(3, 0)]
addpoly([(2,1)],[(-2,1)])
应该给出[]
multpoly([(1,1),(-1,0)], [(1,2),(1,1),(1,0)])
应该给出[(1, 3),(-1, 0)]
这是我刚开始做的,但完全被打动了!
def addpoly(p1, p2):
(coeff1, exp1) = p1
(coeff2, exp2) = p2
if exp1 == exp2:
coeff3 = coeff1 + coeff2
这段python代码对我有用,希望对你也有用。。
加法函数
乘函数
作为comments中的suggested,将多项式表示为指数的multisets要简单得多。
在Python中,最接近multiset的是Counter数据结构。使用将指数映射到系数的
Counter
(甚至只是一个普通字典)将自动合并具有相同指数的条目,正如您在编写简化多项式时所期望的那样。您可以使用
Counter
执行操作,然后在使用完以下函数后转换回成对列表表示:若要添加多项式,可以像指数一样分组并求其系数之和。
(事实上,如果您始终坚持使用计数器表示,您只需
return p + q
)。若要乘法多项式,请将一个多项式中的每个项与另一个多项式中的每个项配对相乘。而且,要乘项,你可以加上指数和乘系数。
我已经想出了一个解决方案,但我不确定它是否得到了优化!
第二个是:
相关问题 更多 >
编程相关推荐