Partage
  • Partager sur Facebook
  • Partager sur Twitter

Karatsuba algo

    13 février 2017 à 12:36:23

    Bonjour j'ai fait l'algo de karatsuba en python sauf que ca m'affiche des erreur que je ne sais pas comment regler.

    def polyProdKara(P, Q) :  
      n=len(P)
      if n==1:
        return Q[0]*P[0]  #l77
      m=n//2
      P0=P[:m] 
      P1=P[m:] #P=P0+X^m P1
      Q0=Q[:m]
      Q1=Q[m:] #Q=Q0+X^m Q1
      T0=polyProdKara(P0,Q0)
      T1=polyProdKara(P1,Q1) #l84
      for i in range(m):
        P1[i]+=P0[i]
        Q1[i]+=Q0[i]
      T2=polyProdKara(P1,Q1)
      for i in range(2*m-1):
        T2[i]=T2[i]-T1[i]-T0[i]
      if n%2==1: #si n pair, les tableaux T0,T1,T2 sont de la meme taille 2*m-1, sinon T1 et T2 sont de taille 2*m+1
        T2[-2]=T2[-2]-T1[-2]
        T2[-1]=T2[-1]-T1[-1]
      produit=[0]*(2*n-1)
      for i in range(2*m-1):
        produit[i]+=T0[i]
        produit[i+m]+=T2[i] 
        produit[i+2*m]+=T1[i]
      if n%2==1:
        produit[3*m-1]+=T2[2*m-1]
        produit[3*m]+=T2[2*m]
        produit[4*m-1]+=T1[2*m-1]
        produit[4*m]+=T1[2*m]
      return(produit)
    

    Les erreurs:

     Traceback (most recent call last):
      File "test.py", line 368, in <module>
        test_polyProd(polyProdKara)
      File "test.py", line 284, in test_polyProd
        res = algo(P,Q)
      File "test.py", line 84, in polyProdKara
        T1=polyProdKara(P1,Q1)
      File "test.py", line 84, in polyProdKara
        T1=polyProdKara(P1,Q1)
      File "test.py", line 77, in polyProdKara
        return Q[0]*P[0]
    IndexError: list index out of range
    




    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      13 février 2017 à 12:47:21

      Je ne lis pas ce type de code, voir PEP8 pour les conventions !

      Par contre pour l'erreur, ça indique que sur un objet list tu as dépassé l'index maximum possible. Par exemple si ta liste a 4 éléments et que tu demandes le 5ème, ça te répondra cette erreur.

      • Partager sur Facebook
      • Partager sur Twitter

      Karatsuba algo

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown