CPGE OUJDA                                                                                                                                                                                                                                                                                                                                                                                            SPE

TRI FUSION

Le tri fusion est un algorithme de tri basé sur la technique algorithmique diviser pour régner. L'opération principale de l'algorithme est la fusion, qui consiste à réunir deux listes triées en une seule.

 

Principe :

Le principe de cet algorithme tend à adopter une formulation récursive :

ü  On découpe les données à trier en deux parties plus ou moins égales

ü  On trie les 2 sous-parties ainsi déterminées

ü  On fusionne les deux sous-parties pour retrouver les données de départ

ü  Exemple

L'implémentation de cet algorithme repose essentiellement en 2 fonctions :

Ø  Fusion  :Permet de fusionner deux listes triées de telle sorte que la liste résultante la soit aussi.

Ø  triFusion             : Une fonction récursive qui assure le découpage de la liste et l'appel de la fonction de fusion.

Ø   

Ø   

Ø  def fusion(L1, L2):

Ø                 res = []

Ø                 ind1, ind2 = 0, 0

Ø                 while ind1 < len(L1) and ind2 < len(L2):

Ø                                 if L1[ind1] <= L2[ind2]:

Ø                                                 res.append(L1[ind1])

Ø                                                 ind1 += 1

Ø                                 else:

Ø                                                 res.append(L2[ind2])

Ø                                                 ind2 += 1

Ø  if ind1!=len(L1):

Ø                                 res+=L1[ind1:]

Ø                 if ind2!=len(L2):

Ø                                 res+=L2[ind2:]

Ø                 return res

Ø  def triFusion(ls):

Ø                 if len(ls) <= 1:

Ø                                 return ls

Ø                 moitie = len(ls) // 2

Ø                 return fusion( triFusion(ls[:moitie]), triFusion(ls[moitie:]))

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Autre méthode

 

Fusion de deux listes Programme Python

 

 

Python

def fusion(T1,T2) :

if T1==[] :return T2 if T2==[] :return T1 if T1[0]<T2[0] :

return [T1[0]]+fusion(T1[1 :],T2)

else :

return [T2[0]]+fusion(T1,T2[1 :])

 

 

Tri fusion d’une liste Programme Python

 

Python

def trifusion(T) :

if len(T)<=1 : return T

T1=[T[x] for x in range(len(T)//2)] T2=[T[x] for x in range(len(T)//2,len(T))] return fusion(trifusion(T1),trifusion(T2))

 

Complexit´e du tri par fusion

 

 Complexit´e temporelle         Pour d´eterminer la formule de r´ecurrence qui nous donnera

la complexit´e de l’algorithme trFusion, ´etudions les trois phases de cet algorithme « di- viser pour r´egner » :

1.  Diviser : cette ´etape se r´eduit au calcul du milieu de l’intervalle [g..h]

2.  R´egner : l’algorithme r´esout r´ecursivement deux sous-probl`emes de tailles respec- tives n/2.

3.  Combiner : la complexit´e de cette ´etape est celle de l’algorithme de fusion qui est

de Θ(n) pour la construction d’un tableau solution de taille n.

Par cons´equent, la complexit´e du tri par fusion est donn´ee par la r´ecurrence :

Θ(1)                                       si n = 1


T (n) =


2T (n/2) + Θ(n)      sinon


 

 

Pour d´eterminer la complexit´e du tri par fusion, nous utilisons le Master-Th´eor`eme : ici

a  =  2  et  b  =  2  donc  logb a  =  1,  et  nous  nous  trouvons  dans  le  cas  2  du  th´eor`eme  :

f (n) = Θ(nlogb a) = Θ(n). Par cons´equent :

 

T (n) = Θ(n lg n)