我想添加和乘以两个多项式。函数有两个参数,如add([(4,3),(3,0)],[(-4,3),(2,1)])
.So,多项式看起来像
我想在不使用任何库的情况下添加和乘以这两个多项式。
我通过创建一个空白列表创建了一个加法和乘法的简化版本,该列表可以将系数从常数项存储到最高指数的共同效果。逻辑只是更新系数并创建一个包含格式元组对的列表(co-eff,exponent)
def add(p1,p2):
x = [0]*(max(p1[0][1],p2[0][1])+1)
for i in p1+p2:
x[i[1]]+=i[0]
res = [(x[i],i) for i in range(len(x)) if x[i]!=0]
res.sort(key = lambda r: r[1], reverse= True)
return res
def mul(p1,p2):
x = [0]*(p1[0][1]*p2[0][1]+1)
for i in p1:
for j in p2:
x[i[1]+j[1]]+=i[0]*j[0]
res = [(x[i],i) for i in range(len(x)) if x[i]!=0]
res.sort(key = lambda r: r[1], reverse= True)
return res
请注意,此代码仅适用于非负指数
在问题中引用的多项式的加法和乘法产生以下结果
add([(4,3),(3,0)],[( - 4,3),(2,1)])= [(2,1),(3,0)]
mul([(4.3),(3.0)],[( - 4.3),(2.1)])= [( - 16,6),(8,4),( - 12, 3),(6,1)]
另外我写了一个方法
def poly_add( x, y):
r = []
min_len = min( len(x), len(y))
for i in range(min_len):
if x[i][1] == y[i][1]:
m = x[i][0] + y[i][0]
if m != 0:
r.append((m, x[i][1]))
if x[i][1] != y[i][1]:
r.append((y[i]))
r.append((x[i]))
return r