chapitre 3 les algorithmes de recherche et de tris

29
Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Chapitre 3 Les algorithmes de recherche et de tris Module 20: Informatique 3 Algorithmique et programmation C eme ANNEE LICENCE D’ENSEIGNEMENT DE MATHEMATIQUES (LEM) eme ANNEE LICENCE CRYPTO MATHEMATIQUE ET SECURITE DE L’INFORMATION (LCMSI) Texte Texte Texte [email protected] 7 novembre 2016 Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 1/ 29

Upload: mohamed-lahby

Post on 15-Apr-2017

60 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Chapitre 3Les algorithmes de recherche et de tris

Module 20: Informatique 3 Algorithmique et programmation C

2eme ANNEE LICENCE D’ENSEIGNEMENT DE MATHEMATIQUES (LEM)

2eme ANNEE LICENCE CRYPTO MATHEMATIQUE ET SECURITE DE L’INFORMATION (LCMSI)

TexteTexteTexte

[email protected]

7 novembre 2016

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 1/ 29

Page 2: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Plan

1 Les algorithmes de rechercheRecherche sequentielleRecherche dichotomique dans un tableau trie

2 Les algorithmes de tris classiquesTri par selectionTri par bulleTri par insertion

3 Les algorithmes de tris rapidesTri rapideTri fusion

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 2/ 29

Page 3: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Recherche sequentielleRecherche dichotomique dans un tableau trie

Recherche sequentielle

Principe de l’algorithme

On cherche a determiner si un tableau contient une certainevaleur.

On parcours le tableau element par element, et on interromprele parcours des que l’element est trouve.

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 3/ 29

Page 4: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Recherche sequentielleRecherche dichotomique dans un tableau trie

Recherche sequentielle

Solution 1

int Recherche Seq(int T[],int N, int x){int i=0 ;

while (i<N and T[i] !=x){i=i+1 ;}

if (i<N)return 1 ;

elsereturn 0 ;

}

Solution 2

int Recherche Seq(int T[],int N, int x){int i=0 ;

for (i=0 ;i < N ;i++)if (T[i]==x)

return 1 ;return 0 ;}

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 4/ 29

Page 5: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Recherche sequentielleRecherche dichotomique dans un tableau trie

Recherche sequentielle

Complexite

la complexite est O(n)

Inconvenient

Cet algorithme est deconseille pour les tableaux tries.

Un dictionnaire contient de l’ordre de 105 mots

Si un test prend 0,01s, une recherche complete prendrait plusde un 1minute 30 s.

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 5/ 29

Page 6: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Recherche sequentielleRecherche dichotomique dans un tableau trie

Recherche dichotomique dans un tableau trie

Principe de l’algorithme

la recherche d’un element dans un tableau avec la methode dedichotomique requiert un tableau trie.

On on coupe le tableau en deux par le milieu et on determinesi la valeur x doit etre recherchee dans la moitie gauche oudroite

En effet, il suffit pour cela de la comparer avec la valeurcentrale.

Puis, on repete le processus sur la portion selectionnee.

.

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 6/ 29

Page 7: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Recherche sequentielleRecherche dichotomique dans un tableau trie

Recherche dichotomique dans un tableau trie

Definition de la fonction

int RechDichotomique(int T[],int N, int x){int g, d, m ;g=0 ;d=N-1 ;while(g<=d){ m=(g+d)/2 ;

if (T[m]==x)return 1 ;

if (T[m]<x)g=m+1 ;

elsed=m-1 ;

}return 0 ;}

Complexite

la complexite de la recherche dichotomique est O(log(n))

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 7/ 29

Page 8: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri par selectionTri par bulleTri par insertion

Tri par selection

Principe

Le tri par selection consiste a chercher la plus petite valeur de la liste, puis de lamettre a la derniere place en l’echangeant avec la premiere valeur. On reitere alors leprocede sur la liste restreinte aux nombres restants et cela jusqu’a obtenir la liste triee.

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 8/ 29

Page 9: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri par selectionTri par bulleTri par insertion

Tri par selection

La fonction TriSelection(T,n)

void TriSelection(int T[],int n) :{int i,j,Posmin,Tmp ;

for(i=0 ;i<n-1 ;i++){

Posmin=i ;for(j=i+1 ;i<n ;i++){

if (T[j]<T[Posmin])Posmin=j ;}

/*****Permutation******/Tmp=T[i] ;T[i]=T[Posmin] ;T[Posmin]=Tmp ;}

}

Complexite

la complexite est O(n2)

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 9/ 29

Page 10: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri par selectionTri par bulleTri par insertion

Tri par bulle

Principe

Le principe du tri par bulle consiste a comparer deux a deux les elements e1 et e2consecutifs d’un tableau et d’effecteur une permutation si e1 > e2. On continue detrier jusqu’a ce qu’il n’y ait plus de permutation.

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 10/ 29

Page 11: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri par selectionTri par bulleTri par insertion

Tri par bulle

La fonction TriBulle(T,n)

void TriBulle(int T[ ],int n){int i,Tmp,inversion=1 ;

while (inversion){inversion=0 ;for(i=0 ;i<n-1 ;i++)

if (T[i]>T[i+1]){/*****Permutation*****/Tmp=T[i] ;T[i]=T[i+1] ;T[i+1]=Tmp ;inversion=1 ;}

}}

Complexite

la complexite est O(n2)

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 11/ 29

Page 12: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri par selectionTri par bulleTri par insertion

Tri par insertion

Principe

Le tri par insertion consiste a inserer le premier element a trier au premieremplacement d’une nouvelle liste, puis on insere chaque nouvel element a sa bonneplace dans la liste deja triee. On reitere alors le procede jusqu’a avoir replace tous leselements de la liste initiale. (jeu de cartes ou un paquet de copies).

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 12/ 29

Page 13: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri par selectionTri par bulleTri par insertion

Tri par insertion

La fonction TriInsertion(T,n)

void TriInsertion(int T[ ],int n){int i,j,Tmp ;

for(i=0 ;i<n ;i++){

j=i-1 ;while (j>=0 and T[j]>T[j+1]){

/********Permutation********/Temp=T[j] ;T[j]=T[j+1] ;T[j+1]=Tmp ;j=j-1 ;

}}

}

Complexite

la complexite est O(n2)

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 13/ 29

Page 14: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri rapideTri fusion

Principe de tri rapide

Definition

Le tri rapide (en anglais quicksort) est un algorithme de tri invente par C.A.R. Hoareen 1961 et fonde sur la methode de conception diviser pour regner. Il est generalementutilise sur des tableaux, mais peut aussi etre adapte aux autres types de donnees.

Principe de fonctionnement

L’algorithme peut s’effectuer recursivement :

1 Le premier element de la liste a trier est appele “pivot”.2 On cree un premier sous-enemble constitue des elements plus petits que le

pivot. On les place a gauche du pivot dans l’ordre ou ils sont dans la listea trier.

3 On cree de la meme facon un deuxieme sous-enemble constitue deselements plus grands que le pivot. On les place a droite de celui-ci dansl’ordre ou ils apparaissent dans le tableau.

4 On procede de meme, par recursivite, sur les deux sous-ensembles jusqu’aobtenir des sous ensembles d’un seul element.

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 14/ 29

Page 15: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri rapideTri fusion

Des exemples d’illustration

Exemple 1On va illustrer le tri rapide sur le tableau T=[7,6,3,5,4,2,1].

On choisit comme Pivot une valeur aleotoire du tableau T.

1. Iteration 1 : Pour trier T[0 :7], on choisit au hasard 4 comme pivot.On place les elements plus petits que 4, puis 4, puis les autres.

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 15/ 29

Page 16: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri rapideTri fusion

Des exemples d’illustration

2. Iteration 2 : Pour trier T[0 :3], on choisit 3 comme pivot.On place les elements plus petits que 3, puis 3, puis les autres.

3. Iteration 3 : Pour trier T[0 :2], on choisit 2 comme pivot..On place les elements plus petits que 2, puis 2, puis les autres.

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 16/ 29

Page 17: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri rapideTri fusion

Des exemples d’illustration

4. Iteration 4 : Pour trier T[0 :3], on choisit 3 comme pivot.On place les elements plus petits que 3, puis 3, puis les autres.

5. Iteration 5 : Pour trier T[0 :2], on choisit 2 comme pivot..On place les elements plus petits que 2, puis 2, puis les autres.

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 17/ 29

Page 18: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri rapideTri fusion

Des exemples d’illustration

Exemple 2On va illustrer le tri rapide sur le tableau T=[4,6,3,5,7,2,1] (Pivot=T[0]).

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 18/ 29

Page 19: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri rapideTri fusion

Implementation de l’algorithme de tri rapide

Tri rapide -Solution-

Pour implementer l’algorithme tri rapide on a besoin de programmer quatre

fonctions :

1 La fonction Echange(T,i,j) pour echanger les elements T[i] et T[j] d’untableau T

2 La fonction Partition(T, premier, dernier) prend le tableau T et deuxindices premier et dernier en arguments, avec la convention que premierest inclus et dernier exclu. On suppose qu’il y a au moins un element dansce segment,

3 La fonction Tri Rapide Partition(T, premier, dernier) : qui permet detrier une liste T en la partitionnant recursivement en sous listes.

4 La fonction Tri Rapide(T) permettant de trier la liste T en uitlisantl’algorithme tri rapide.

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 19/ 29

Page 20: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri rapideTri fusion

Implementation de l’algorithme de tri rapide

La fonction Partition(T, premier, dernier)

void partition(int T[ ], int premier, int dernier){int gauche,droite, pivot = T[premier]gauche = premier #On pointe gauche sur l’indice de pivotdroite = dernierflag = 0while (flag == 0){

while (T[droite] >= pivot and droite >= gauche){droite = droite - 1 ;}

if (droite >= gauche){Echange(T,gauche,droite) ;pivot=T[droite] ;}

while (gauche <= droite and T[gauche] <= pivot){gauche = gauche + 1 ;}

if (gauche <= droite){Echange(T,gauche,droite) ;pivot=T[gauche] ;}

if (droite < gauche){#condition d’arretflag = 1 ;}

}return droite ;}

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 20/ 29

Page 21: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri rapideTri fusion

Implementation de l’algorithme de tri rapide

Tri rapide -Solution-

La fonction Echange(T,i,j)

void Echange(int T[ ],int i,int j).............

La fonction Tri Rapide Partition(T)

void Tri Rapide Partition(int T[ ], int premier,int dernier){int m ;if (premier < dernier){

m = partition(T, premier, dernier) ;Tri Rapide Partition(T, premier, m-1) ;Tri Rapide Partition(T, m+1, dernier) ;}

}

La fonction Tri Rapide(T)

void Tri Rapide(int T[ ], int N){Tri Rapide Partition(T, 0,N-1) ;}

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 21/ 29

Page 22: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri rapideTri fusion

Principe de tri fusion

Definition

Le tri fusion (merge sort) est un des premiers algorithmes inventes pour trier untableau car (selon Donald Knuth) il aurait ete propose par John von Neuman des1945 ; il constitue un parfait exemple d’algorithme naturellement recursif qui utilise leconcept de la programmation diviser pour regner.

Principe de fonctionnement

L’algorithme peut s’effectuer recursivement :

1 On decoupe en deux parties a peu pres egales les donnees a trier.2 On trie les donnees de chaque partie.3 On fusionne les deux parties.

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 22/ 29

Page 23: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri rapideTri fusion

Des exemples d’illustration

Exemple 1On va illustrer le tri fusion sur le tableau T=[7,6,3,5,4,2,1,8].

• Pour trier T[0 :8], on trie T[0 :4] et T[4 :8].

• Pour trier T[0 :4], on trie T[0 :2] et T[2 :4].

• Pour trier T[0 :2], on trie T[0 :1] et T[1 :2].

• On fusionne T[0 :1] et T[1 :2].

• Pour trier T[2 :4], on trie T[2 :3] et T[3 :4].

• On fusionne T[0 :1] et T[1 :2]

• On fusionne T[0 :2] et T[2 :4].

• Pour trier T[4 :8], on trie T[4 :6] et T[6 :8].

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 23/ 29

Page 24: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri rapideTri fusion

Des exemples d’illustration

• Pour trier T[4 :6], on trie T[4 :5] et T[5 :6].

• On fusionne T[4 :5] et T[5 :6]

• Pour trier T[6 :8], on trie T[6 :7] et T[7 :8].

• On fusionne T[6 :7] et T[7 :8].

• On fusionne T[4 :6] et T[6 :8].

• On fusionne T[0 :4] et T[4 :8].

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 24/ 29

Page 25: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri rapideTri fusion

Des exemples d’illustration

Exemple 2On va illustrer le tri fusion sur le tableau T=[3,4,6,2,5,1,8,7].

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 25/ 29

Page 26: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri rapideTri fusion

Implementation de l’algorithme de tri fusion

Tri fusion -Solution-

Pour implementer l’algorithme tri fusion on a besoin de programmer trois

fonctions :

1 Une fonction iterative Fusion(T1,T2,g,m,d) qui prend en arguments deuxtableaux, T1 et T2, et les trois indices g, m et d. Les portions a1[g..m[ eta1[m..d[ sont supposees triees. Cette fonction permet d’effectuer la fusionde ces deux portions.

2 La fonction recursive Tri Fusion Rec(T,g, d) prend en arguments lesindices g et d delimitant la portion a trier. Si le segment contient au plusun element, c’est-a-dire si g >= d − 1, il n’y a rien a faire. Sinon, onpartage l’intervalle en deux moities egales : on calcule l’element medianm, puis on trie recursivement T[g..m[ et T[m..d[.

3 Une fonction Tri Fusion(T) permettant de trier la liste T en uitlisantl’algorithme tri fusion.

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 26/ 29

Page 27: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri rapideTri fusion

Implementation de l’algorithme de tri fusion

Tri fusion -Solution-

Programme iteratif Fusion(T1,T2,g,m,d)

void Fusion(int T1[ ], int T2[ ], int g, int m, int d).......................................................

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 27/ 29

Page 28: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri rapideTri fusion

Implementation de l’algorithme de tri fusion

Tri fusion -Solution-

Le code complet :Tri Fusion Rec(T,g,d)

void Tri Fusion Rec(int T[ ], int g, int d).......................................................

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 28/ 29

Page 29: Chapitre 3 Les algorithmes de recherche et de tris

Les algorithmes de rechercheLes algorithmes de tris classiques

Les algorithmes de tris rapides

Tri rapideTri fusion

Implementation de l’algorithme de tri fusion

Tri fusion -Solution-

Le code complet : Tri Fusion(T)

void Tri Fusion(int T[ ], int N).......................................................

Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 29/ 29