用Python程序将两个多项式相乘,其中多项式的每个项都表示为一对整数(系数、指数)?

2024-09-28 19:00:47 发布

您现在位置:Python中文网/ 问答频道 /正文

函数以两个列表(以元组为值)作为输入 我在脑海中按照算法来编写代码,但要正确地编写。在

——>首先将存储每个幂的系数所需的字典数乘以多项式p2的所有系数。在

然后将所有的字典系数相加,这些系数具有相同的幂次。在

def multpoly(p1,p2):

    dp1=dict(map(reversed, p1))
    dp2=dict(map(reversed, p2))
    kdp1=list(dp1.keys())
    kdp2=list(dp2.keys())

    rslt={}
    if len(kdp1)>=len(kdp2): 
      kd1=kdp1
      kd2=kdp2
    elif len(kdp1)<len(kdp2):
      kd1=kdp2
      kd2=kdp1
    for n in kd2:
      for m in kd1:
        rslt[n]={m:0}
        if len(dp1)<=len(dp2):
          rslt[n][m+n]=rslt[n][m+n] + dp1[n]*dp2[m]
        elif len(dp1)>len(dp2):
          rslt[n][m+n]=rslt[n][m+n] + dp2[n]*dp1[m]
    return(rslt) 

Tags: maplen字典dictp2系数p1rslt
1条回答
网友
1楼 · 发布于 2024-09-28 19:00:47

如果我理解正确的话,你需要一个函数将两个多项式相乘并返回结果。以后,试着发布一个具体的问题。以下是适用于您的代码:

def multiply_terms(term_1, term_2):
    new_c = term_1[0] * term_2[0]
    new_e = term_1[1] + term_2[1]
    return (new_c, new_e)


def multpoly(p1, p2):
    """
    @params p1,p2 are lists of tuples where each tuple represents a pair of term coefficient and exponent
    """
    # multiply terms
    result_poly = []
    for term_1 in p1:
        for term_2 in p2:
            result_poly.append(multiply_terms(term_1, term_2))
    # collect like terms
    collected_terms = []
    exps = [term[1] for term in result_poly]
    for e in exps:
        count = 0
        for term in result_poly:
            if term[1] == e:
                count += term[0]
        collected_terms.append((count, e))
    return collected_terms

但是请注意,绝对有更好的方法来表示这些多项式,这样乘法运算更快更容易编码。你的口述想法稍微好一点,但仍然很混乱。可以使用一个列表,其中索引表示指数,值表示系数。例如,您可以将2x^4 + 3x + 1表示为[1, 3, 0, 0, 2]。在

相关问题 更多 >