在Python中,最接近multiset的是Counter数据结构。使用将指数映射到系数的Counter(甚至只是一个普通字典)将自动合并具有相同指数的条目,正如您在编写简化多项式时所期望的那样。

您可以使用Counter执行操作,然后在使用完以下函数后转换回成对列表表示:def counter_to_poly(c):

p = [(coeff, exp) for exp, coeff in c.items() if coeff != 0]

# sort by exponents in descending order

p.sort(key = lambda pair: pair[1], reverse = True)

return p

若要添加多项式,可以像指数一样分组并求其系数之和。def addpoly(p, q):

r = collections.Counter()

for coeff, exp in (p + q):

r[exp] += coeff

return counter_to_poly(r)

(事实上,如果您始终坚持使用计数器表示,您只需return p + q)。

若要乘法多项式,请将一个多项式中的每个项与另一个多项式中的每个项配对相乘。而且,要乘项,你可以加上指数和乘系数。def mulpoly(p, q):

r = collections.Counter()

for (c1, e1), (c2, e2) in itertools.product(p, q):

r[e1 + e2] += c1 * c2

return counter_to_poly(r)

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐