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
2´eme ANNEE LICENCE D’ENSEIGNEMENT DE MATHEMATIQUES (LEM)
2´eme ANNEE LICENCE CRYPTO MATHEMATIQUE ET SECURITE DE L’INFORMATION (LCMSI)
Texte
Texte
Texte
mlahby@gmail.com
7 novembre 2016
Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 1/ 29
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Plan
1 Les algorithmes de recherche
Recherche s´equentielle
Recherche dichotomique dans un tableau tri´e
2 Les algorithmes de tris classiques
Tri par s´election
Tri par bulle
Tri par insertion
3 Les algorithmes de tris rapides
Tri rapide
Tri fusion
Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 2/ 29
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Recherche s´equentielle
Recherche dichotomique dans un tableau tri´e
Recherche s´equentielle
Principe de l’algorithme
On cherche `a d´eterminer si un tableau contient une certaine
valeur.
On parcours le tableau ´el´ement par ´el´ement, et on interrompre
le parcours d`es que l’´el´ement est trouv´e.
Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 3/ 29
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Recherche s´equentielle
Recherche dichotomique dans un tableau tri´e
Recherche s´equentielle
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 ;
else
return 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
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Recherche s´equentielle
Recherche dichotomique dans un tableau tri´e
Recherche s´equentielle
Complexit´e
la complexit´e est O(n)
Inconv´enient
Cet algorithme est d´econseill´e pour les tableaux tri´es.
Un dictionnaire contient de l’ordre de 105 mots
Si un test prend 0,01s, une recherche compl`ete prendrait plus
de un 1minute 30 s.
Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 5/ 29
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Recherche s´equentielle
Recherche dichotomique dans un tableau tri´e
Recherche dichotomique dans un tableau tri´e
Principe de l’algorithme
la recherche d’un ´el´ement dans un tableau avec la m´ethode de
dichotomique requiert un tableau tri´e.
On on coupe le tableau en deux par le milieu et on d´etermine
si la valeur x doit ˆetre recherch´ee dans la moiti´e gauche ou
droite
En effet, il suffit pour cela de la comparer avec la valeur
centrale.
Puis, on r´ep`ete le processus sur la portion s´electionn´ee.
.
Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 6/ 29
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Recherche s´equentielle
Recherche dichotomique dans un tableau tri´e
Recherche dichotomique dans un tableau tri´e
D´efinition 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 ;
else
d=m-1 ;
}
return 0 ;
}
Complexit´e
la complexit´e de la recherche dichotomique est O(log(n))
Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 7/ 29
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri par s´election
Tri par bulle
Tri par insertion
Tri par s´election
Principe
Le tri par s´election consiste `a chercher la plus petite valeur de la liste, puis de la
mettre `a la derni`ere place en l’´echangeant avec la premi`ere valeur. On r´eit`ere alors le
proc´ed´e sur la liste restreinte aux nombres restants et cela jusqu’`a obtenir la liste tri´ee.
Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 8/ 29
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri par s´election
Tri par bulle
Tri par insertion
Tri par s´election
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 ;
}
}
Complexit´e
la complexit´e est O(n2)
Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 9/ 29
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri par s´election
Tri par bulle
Tri par insertion
Tri par bulle
Principe
Le principe du tri par bulle consiste `a comparer deux `a deux les ´el´ements e1 et e2
cons´ecutifs d’un tableau et d’effecteur une permutation si e1 > e2. On continue de
trier 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
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri par s´election
Tri par bulle
Tri 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 ;}
}
}
Complexit´e
la complexit´e est O(n2)
Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 11/ 29
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri par s´election
Tri par bulle
Tri par insertion
Tri par insertion
Principe
Le tri par insertion consiste `a ins´erer le premier ´el´ement `a trier au premier
emplacement d’une nouvelle liste, puis on ins`ere chaque nouvel ´el´ement `a sa bonne
place dans la liste d`ej`a tri´ee. On r´eit`ere alors le proc´ed´e jusqu’`a avoir replac´e tous les
´el´ements 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
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri par s´election
Tri par bulle
Tri 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 ;
}
}
}
Complexit´e
la complexit´e est O(n2)
Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 13/ 29
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Principe de tri rapide
D´efinition
Le tri rapide (en anglais quicksort) est un algorithme de tri invent´e par C.A.R. Hoare
en 1961 et fond´e sur la m´ethode de conception diviser pour r´egner. Il est g´en´eralement
utilis´e sur des tableaux, mais peut aussi ˆetre adapt´e aux autres types de donn´ees.
Principe de fonctionnement
L’algorithme peut s’effectuer r´ecursivement :
1 Le premier ´el´ement de la liste `a trier est appel´e “pivot”.
2 On cr´ee un premier sous-enemble constitu´e des ´el´ements plus petits que le
pivot. On les place `a gauche du pivot dans l’ordre o`u ils sont dans la liste
`a trier.
3 On cr´ee de la mˆeme fa¸con un deuxi`eme sous-enemble constitu´e des
´el´ements plus grands que le pivot. On les place `a droite de celui-ci dans
l’ordre o`u ils apparaissent dans le tableau.
4 On proc`ede de mˆeme, par recursivit´e, sur les deux sous-ensembles jusqu’`a
obtenir des sous ensembles d’un seul ´el´ement.
Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 14/ 29
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Des exemples d’illustration
Exemple 1
On va illustrer le tri rapide sur le tableau T=[7,6,3,5,4,2,1].
On choisit comme Pivot une valeur al´eotoire du tableau T.
1. It´eration 1 : Pour trier T[0 :7], on choisit au hasard 4 comme pivot.
On place les ´el´ements plus petits que 4, puis 4, puis les autres.
Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 15/ 29
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Des exemples d’illustration
2. It´eration 2 : Pour trier T[0 :3], on choisit 3 comme pivot.
On place les ´el´ements plus petits que 3, puis 3, puis les autres.
3. It´eration 3 : Pour trier T[0 :2], on choisit 2 comme pivot..
On place les ´el´ements plus petits que 2, puis 2, puis les autres.
Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 16/ 29
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Des exemples d’illustration
4. It´eration 4 : Pour trier T[0 :3], on choisit 3 comme pivot.
On place les ´el´ements plus petits que 3, puis 3, puis les autres.
5. It´eration 5 : Pour trier T[0 :2], on choisit 2 comme pivot..
On place les ´el´ements plus petits que 2, puis 2, puis les autres.
Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 17/ 29
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Des exemples d’illustration
Exemple 2
On 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
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Impl´ementation de l’algorithme de tri rapide
Tri rapide -Solution-
Pour impl´ementer l’algorithme tri rapide on a besoin de programmer quatre
fonctions :
1 La fonction Echange(T,i,j) pour ´echanger les ´el´ements T[i] et T[j] d’un
tableau T
2 La fonction Partition(T, premier, dernier) prend le tableau T et deux
indices premier et dernier en arguments, avec la convention que premier
est inclus et dernier exclu. On suppose qu’il y a au moins un ´el´ement dans
ce segment,
3 La fonction Tri Rapide Partition(T, premier, dernier) : qui permet de
trier une liste T en la partitionnant r´ecursivement en sous listes.
4 La fonction Tri Rapide(T) permettant de trier la liste T en uitlisant
l’algorithme tri rapide.
Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 19/ 29
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Impl´ementation 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 pivot
droite = dernier
flag = 0
while (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’arrˆet
flag = 1 ;}
}
return droite ;}
Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 20/ 29
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Impl´ementation 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
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Principe de tri fusion
D´efinition
Le tri fusion (merge sort) est un des premiers algorithmes invent´es pour trier un
tableau car (selon Donald Knuth) il aurait ´et´e propos´e par John von Neuman d`es
1945 ; il constitue un parfait exemple d’algorithme naturellement r´ecursif qui utilise le
concept de la programmation diviser pour r´egner.
Principe de fonctionnement
L’algorithme peut s’effectuer r´ecursivement :
1 On d´ecoupe en deux parties `a peu pr`es ´egales les donn´ees `a trier.
2 On trie les donn´ees de chaque partie.
3 On fusionne les deux parties.
Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 22/ 29
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Des exemples d’illustration
Exemple 1
On 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
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri 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
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Des exemples d’illustration
Exemple 2
On 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
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Impl´ementation de l’algorithme de tri fusion
Tri fusion -Solution-
Pour impl´ementer l’algorithme tri fusion on a besoin de programmer trois
fonctions :
1 Une fonction it´erative Fusion(T1,T2,g,m,d) qui prend en arguments deux
tableaux, T1 et T2, et les trois indices g, m et d. Les portions a1[g..m[ et
a1[m..d[ sont suppos´ees tri´ees. Cette fonction permet d’effectuer la fusion
de ces deux portions.
2 La fonction r´ecursive Tri Fusion Rec(T,g, d) prend en arguments les
indices g et d d´elimitant la portion `a trier. Si le segment contient au plus
un ´el´ement, c’est-`a-dire si g >= d − 1, il n’y a rien `a faire. Sinon, on
partage l’intervalle en deux moiti´es ´egales : on calcule l’´el´ement m´edian
m, puis on trie r´ecursivement T[g..m[ et T[m..d[.
3 Une fonction Tri Fusion(T) permettant de trier la liste T en uitlisant
l’algorithme tri fusion.
Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 26/ 29
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Impl´ementation de l’algorithme de tri fusion
Tri fusion -Solution-
Programme it´eratif 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
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Impl´ementation 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
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Impl´ementation 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

Chapitre 3 Les algorithmes de recherche et de tris

  • 1.
    Les algorithmes derecherche 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 2´eme ANNEE LICENCE D’ENSEIGNEMENT DE MATHEMATIQUES (LEM) 2´eme ANNEE LICENCE CRYPTO MATHEMATIQUE ET SECURITE DE L’INFORMATION (LCMSI) Texte Texte Texte mlahby@gmail.com 7 novembre 2016 Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 1/ 29
  • 2.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Plan 1 Les algorithmes de recherche Recherche s´equentielle Recherche dichotomique dans un tableau tri´e 2 Les algorithmes de tris classiques Tri par s´election Tri par bulle Tri par insertion 3 Les algorithmes de tris rapides Tri rapide Tri fusion Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 2/ 29
  • 3.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Recherche s´equentielle Recherche dichotomique dans un tableau tri´e Recherche s´equentielle Principe de l’algorithme On cherche `a d´eterminer si un tableau contient une certaine valeur. On parcours le tableau ´el´ement par ´el´ement, et on interrompre le parcours d`es que l’´el´ement est trouv´e. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 3/ 29
  • 4.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Recherche s´equentielle Recherche dichotomique dans un tableau tri´e Recherche s´equentielle 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 ; else return 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
  • 5.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Recherche s´equentielle Recherche dichotomique dans un tableau tri´e Recherche s´equentielle Complexit´e la complexit´e est O(n) Inconv´enient Cet algorithme est d´econseill´e pour les tableaux tri´es. Un dictionnaire contient de l’ordre de 105 mots Si un test prend 0,01s, une recherche compl`ete prendrait plus de un 1minute 30 s. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 5/ 29
  • 6.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Recherche s´equentielle Recherche dichotomique dans un tableau tri´e Recherche dichotomique dans un tableau tri´e Principe de l’algorithme la recherche d’un ´el´ement dans un tableau avec la m´ethode de dichotomique requiert un tableau tri´e. On on coupe le tableau en deux par le milieu et on d´etermine si la valeur x doit ˆetre recherch´ee dans la moiti´e gauche ou droite En effet, il suffit pour cela de la comparer avec la valeur centrale. Puis, on r´ep`ete le processus sur la portion s´electionn´ee. . Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 6/ 29
  • 7.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Recherche s´equentielle Recherche dichotomique dans un tableau tri´e Recherche dichotomique dans un tableau tri´e D´efinition 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 ; else d=m-1 ; } return 0 ; } Complexit´e la complexit´e de la recherche dichotomique est O(log(n)) Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 7/ 29
  • 8.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri par s´election Tri par bulle Tri par insertion Tri par s´election Principe Le tri par s´election consiste `a chercher la plus petite valeur de la liste, puis de la mettre `a la derni`ere place en l’´echangeant avec la premi`ere valeur. On r´eit`ere alors le proc´ed´e sur la liste restreinte aux nombres restants et cela jusqu’`a obtenir la liste tri´ee. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 8/ 29
  • 9.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri par s´election Tri par bulle Tri par insertion Tri par s´election 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 ; } } Complexit´e la complexit´e est O(n2) Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 9/ 29
  • 10.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri par s´election Tri par bulle Tri par insertion Tri par bulle Principe Le principe du tri par bulle consiste `a comparer deux `a deux les ´el´ements e1 et e2 cons´ecutifs d’un tableau et d’effecteur une permutation si e1 > e2. On continue de trier 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
  • 11.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri par s´election Tri par bulle Tri 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 ;} } } Complexit´e la complexit´e est O(n2) Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 11/ 29
  • 12.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri par s´election Tri par bulle Tri par insertion Tri par insertion Principe Le tri par insertion consiste `a ins´erer le premier ´el´ement `a trier au premier emplacement d’une nouvelle liste, puis on ins`ere chaque nouvel ´el´ement `a sa bonne place dans la liste d`ej`a tri´ee. On r´eit`ere alors le proc´ed´e jusqu’`a avoir replac´e tous les ´el´ements 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
  • 13.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri par s´election Tri par bulle Tri 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 ; } } } Complexit´e la complexit´e est O(n2) Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 13/ 29
  • 14.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Principe de tri rapide D´efinition Le tri rapide (en anglais quicksort) est un algorithme de tri invent´e par C.A.R. Hoare en 1961 et fond´e sur la m´ethode de conception diviser pour r´egner. Il est g´en´eralement utilis´e sur des tableaux, mais peut aussi ˆetre adapt´e aux autres types de donn´ees. Principe de fonctionnement L’algorithme peut s’effectuer r´ecursivement : 1 Le premier ´el´ement de la liste `a trier est appel´e “pivot”. 2 On cr´ee un premier sous-enemble constitu´e des ´el´ements plus petits que le pivot. On les place `a gauche du pivot dans l’ordre o`u ils sont dans la liste `a trier. 3 On cr´ee de la mˆeme fa¸con un deuxi`eme sous-enemble constitu´e des ´el´ements plus grands que le pivot. On les place `a droite de celui-ci dans l’ordre o`u ils apparaissent dans le tableau. 4 On proc`ede de mˆeme, par recursivit´e, sur les deux sous-ensembles jusqu’`a obtenir des sous ensembles d’un seul ´el´ement. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 14/ 29
  • 15.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Des exemples d’illustration Exemple 1 On va illustrer le tri rapide sur le tableau T=[7,6,3,5,4,2,1]. On choisit comme Pivot une valeur al´eotoire du tableau T. 1. It´eration 1 : Pour trier T[0 :7], on choisit au hasard 4 comme pivot. On place les ´el´ements plus petits que 4, puis 4, puis les autres. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 15/ 29
  • 16.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Des exemples d’illustration 2. It´eration 2 : Pour trier T[0 :3], on choisit 3 comme pivot. On place les ´el´ements plus petits que 3, puis 3, puis les autres. 3. It´eration 3 : Pour trier T[0 :2], on choisit 2 comme pivot.. On place les ´el´ements plus petits que 2, puis 2, puis les autres. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 16/ 29
  • 17.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Des exemples d’illustration 4. It´eration 4 : Pour trier T[0 :3], on choisit 3 comme pivot. On place les ´el´ements plus petits que 3, puis 3, puis les autres. 5. It´eration 5 : Pour trier T[0 :2], on choisit 2 comme pivot.. On place les ´el´ements plus petits que 2, puis 2, puis les autres. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 17/ 29
  • 18.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Des exemples d’illustration Exemple 2 On 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
  • 19.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Impl´ementation de l’algorithme de tri rapide Tri rapide -Solution- Pour impl´ementer l’algorithme tri rapide on a besoin de programmer quatre fonctions : 1 La fonction Echange(T,i,j) pour ´echanger les ´el´ements T[i] et T[j] d’un tableau T 2 La fonction Partition(T, premier, dernier) prend le tableau T et deux indices premier et dernier en arguments, avec la convention que premier est inclus et dernier exclu. On suppose qu’il y a au moins un ´el´ement dans ce segment, 3 La fonction Tri Rapide Partition(T, premier, dernier) : qui permet de trier une liste T en la partitionnant r´ecursivement en sous listes. 4 La fonction Tri Rapide(T) permettant de trier la liste T en uitlisant l’algorithme tri rapide. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 19/ 29
  • 20.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Impl´ementation 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 pivot droite = dernier flag = 0 while (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’arrˆet flag = 1 ;} } return droite ;} Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 20/ 29
  • 21.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Impl´ementation 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
  • 22.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Principe de tri fusion D´efinition Le tri fusion (merge sort) est un des premiers algorithmes invent´es pour trier un tableau car (selon Donald Knuth) il aurait ´et´e propos´e par John von Neuman d`es 1945 ; il constitue un parfait exemple d’algorithme naturellement r´ecursif qui utilise le concept de la programmation diviser pour r´egner. Principe de fonctionnement L’algorithme peut s’effectuer r´ecursivement : 1 On d´ecoupe en deux parties `a peu pr`es ´egales les donn´ees `a trier. 2 On trie les donn´ees de chaque partie. 3 On fusionne les deux parties. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 22/ 29
  • 23.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Des exemples d’illustration Exemple 1 On 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
  • 24.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri 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
  • 25.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Des exemples d’illustration Exemple 2 On 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
  • 26.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Impl´ementation de l’algorithme de tri fusion Tri fusion -Solution- Pour impl´ementer l’algorithme tri fusion on a besoin de programmer trois fonctions : 1 Une fonction it´erative Fusion(T1,T2,g,m,d) qui prend en arguments deux tableaux, T1 et T2, et les trois indices g, m et d. Les portions a1[g..m[ et a1[m..d[ sont suppos´ees tri´ees. Cette fonction permet d’effectuer la fusion de ces deux portions. 2 La fonction r´ecursive Tri Fusion Rec(T,g, d) prend en arguments les indices g et d d´elimitant la portion `a trier. Si le segment contient au plus un ´el´ement, c’est-`a-dire si g >= d − 1, il n’y a rien `a faire. Sinon, on partage l’intervalle en deux moiti´es ´egales : on calcule l’´el´ement m´edian m, puis on trie r´ecursivement T[g..m[ et T[m..d[. 3 Une fonction Tri Fusion(T) permettant de trier la liste T en uitlisant l’algorithme tri fusion. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 26/ 29
  • 27.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Impl´ementation de l’algorithme de tri fusion Tri fusion -Solution- Programme it´eratif 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
  • 28.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Impl´ementation 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
  • 29.
    Les algorithmes derecherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Impl´ementation 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