2016-08-21 439 views
-2

功能需要兩個列表(具有元組作爲值)作爲輸入 我在我的腦海中,後面的算法爲此編寫代碼,但要正確編寫它。Python程序將兩個多項式相乘,其中多項式的每個項表示爲一對整數(係數,指數)?

- >首先要求no。存儲每個冪的係數的字典乘以多項式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) 
+0

請提出具體問題。 – xnx

+0

不清楚你問什麼或你的問題是什麼 –

+0

[this]的可能重複(http://stackoverflow.com/questions/39057546/how-to-calculate-sum-of-two-polynomials/ 39058521#39058521)問題? –

回答

1

如果我理解正確,您需要一個函數來乘以兩個多項式並返回結果。將來,請嘗試發佈具體問題。下面是代碼,會爲你工作:

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]