def equilibre_reccurVar(texte, n, ind): res=([],0) if longueur(texte)<=n: #si la longueur du texte est inférieur à la longueur de la ligne res=([texte],0) #alors pas besoin de le découper, et on ignore le déséquilibre MEMO.add(ind,res[0],res[1]) else : curr=0 s='infini' while longueur(texte[0:curr+1])<=n: reccur=MEMO.get(ind+curr+1) if reccur==-1: reccur=equilibre_reccurVar(texte[curr+1:],n,ind+curr+1) MEMO.add(ind+1,reccur[0],reccur[1]) s1=variance([texte[0:curr+1]]+reccur[0]) if min(s1,s)==s1: s=s1 res=([texte[0:curr+1]]+reccur[0],s) curr+=1 return res
def equilibreVar(texte, n): global MEMO MEMO=Memo() for i in range (len(texte)-1,-1,-1): #Pour i allant de l'indice du dernier mot au premier if longueur(texte[i:])<=n: res=([texte[i:]],0) else: curr=0 deseq='infini' while longueur(texte[i:i+curr+1])<=n: suite=MEMO.get(i+curr+1) deseq_bis=variance([texte[i:i+curr+1]]+suite[0]) if min(deseq,deseq_bis)==deseq_bis: #on notera que la fonction min a été surchargée pour #considérer 'infini' comme l'infini deseq=deseq_bis res=([texte[i:i+curr+1]]+suite[0],deseq) curr+=1 MEMO.add(i,res[0],res[1]) return res