SlideShare une entreprise Scribd logo
1  sur  91
Algorithmique : Volume 6
• Recherche
• Adressage dispersé
• Tris
• Complexité
Cécile Balkanski, Nelly Bensimon, Gérard Ligozat
iUT ORSA
Y
Université Paris XI
I.U.T. d'Orsay
Département Informatique
Année scolaire 2003-2004
2003-2004 Algorithmique 6 : Recherche,
complexité, tris
2
Recherche
2003-2004 Algorithmique 6 : Recherche, complexité, tris 3
Recherche
• Problème général abstrait
ensemble de valeurs E, élément a; est-ce que a  E?
réponse: booléen (x) { xE | x=a }
• plus généralement
existe-t-il x vérifiant certains critères
(x) { xE | j(x)}
trouver tous les x satisfaisant certains critères
{ xE | j(x)} (bases de données)
2003-2004 Algorithmique 6 : Recherche, complexité, tris 4
Recherche en informatique
• On ne travaille pas sur des ensembles mathématiques,
mais sur des structures de données particulières
• Les données peuvent être de nature complexe
(agrégats, classes)
• Exemples :
tableau
tableau trié
20 18 9 5 24 13 27 2 8 32 7 12 36 15 17 19
2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36
2003-2004 Algorithmique 6 : Recherche, complexité, tris 5
32
18
9
5
2
24
27
20
36
19
13
8
12
15
17
7
arbre binaire de recherche
2003-2004 Algorithmique 6 : Recherche, complexité, tris 6
Tri de données complexes
• Exemple de donnée complexe:
type Etudiant = agrégat
nom: chaîne
âge: entier
classement: entier
photo: fichier_GIF
fin
• on peut trier par nom (ordre alphabétique), par âge, par
classement
• pas par photo
• clés, clés primaires ex-aequo, même âge
2003-2004 Algorithmique 6 : Recherche, complexité, tris 7
Recherche et type de données
• On utilise divers types de données sur lesquelles
on fait des opérations de base:
- ajout
- suppression
- mise-à jour
- consultation
• Chaque structure a des avantages et des
inconvénients :
• tableau, tableau trié, arbre binaire, liste chaînée,
etc.
2003-2004 Algorithmique 6 : Recherche, complexité, tris 8
Recherche séquentielle
fonction rechSeq (tab , nbre , val) retourne (booléen)
{renvoie VRAI si val est dans tab, FAUX sinon}
paramètre s (D) tab: tableau[1, MAX] d'entiers
(D) nbr, val: entier
variables trouvé: booléen i: entier
début trouvé  faux
i  0
tant que non trouvé ET i < nbr faire
i  i+ 1
trouvé  (tab[i] = val)
ftq
retourne (trouvé)
fin
2003-2004 Algorithmique 6 : Recherche, complexité, tris 9
fonction rechSeq (tab, nbre, val) retourne(entier)
{renvoie le premier indice où se trouve val dans tab, -1 sinon}
paramètre s (D) tab: tableau [1, MAX] d'entiers
(D) nbr, val: entier
variables trouvé: booléen i: entier
début
trouvé  faux
i  0
tant que non trouvé ET i < nbr faire
i  i+1
trouvé  (tab[i] = val)
ftq
si trouvé alors retourne (i) sinon retourne (-1) fsi
fin
2003-2004 Algorithmique 6 : Recherche, complexité, tris 10
Recherche avec critères
procédure rechLesMin (tab_d, nbre_d, tab_r, nbre_r, val)
{renvoie dans le tableau tab_r les éléments de tab_d  val}
paramètre s (D) tab_d: tableau [1, MAX] d'entiers,
nbr_d, val: entier
(R) tab_r: tableau [1, MAX] d'entiers, nbr_r: entier
variables id, ir: entiers
début ir  0
pour id  l à nbre_d faire
si (tab_d[id]  val)
alors irir+ 1
tab_r[ir]  tab_d[id]
fsi
fpour
fin
2003-2004 Algorithmique 6 : Recherche, complexité, tris 11
fonction rechMin (tab, nbre) retourne(entier)
{renvoie la plus petite valeur contenue dans le tableau tab}
paramètre s (D) tab : tableau [1, MAX] d'entiers,
nbr : entier
variables i, min : entiers
début
imin  tab[l]
pour id  2 à nbre faire
si (tab[i] < min)
alors min  tab[i]
fsi
fpour
retourne (tab[min])
fin
2003-2004 Algorithmique 6 : Recherche, complexité, tris 12
fonction rechPosMin (tab, nbre) retourne(entier)
{retourne le (dernier) indice de la plus petite valeur du tableau tab}
paramètre s (D) tab: tableau [1, MAX] d'entiers, nbr: entier
variables i, imin, min: entiers
début
min tab[1]
imin 1
pour id 2 à nbre faire
si (tab[i]  min)
alors min tab[i]
imin  i
fsi
fpour
retourne (imin)
fin
2003-2004 Algorithmique 6 : Recherche, complexité, tris 13
Recherche séquentielle dans tableau ordonné
fonction rechSeq (tab, nbre, val) retourne(entier)
{renvoie le premier indice où se trouve val s'il est dans tab, -1 sinon}
paramètre s (D) tab: tableau [1, MAX] d'entiers
(D) nbr, val: entier
variables trouvé, dépassé : booléens ; i : entier
début
trouvé  faux; dépassé  faux; i  0
tant que non (trouvé OU dépassé) ET i < nbr faire
i  i+ 1
trouvé  (tab[i] = val)
dépassé  (tab[i] > val)
ftq
si trouvé alors retourne (i) sinon retourne(-1)
fin
2003-2004 Algorithmique 6 : Recherche, complexité, tris 14
Recherche dichotomique
• Rappel: les valeurs doivent être triées !
Principe:
on vise au milieu du tableau
si l'élément visé est plus grand que val, il suffit
de chercher à gauche ; s'il est plus grand, il
suffit de chercher à droite
2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36
2003-2004 Algorithmique 6 : Recherche, complexité, tris 15
2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36
2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36
2003-2004 Algorithmique 6 : Recherche, complexité, tris 16
2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36
2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36
2003-2004 Algorithmique 6 : Recherche, complexité, tris 17
Recherche dichotomique
fonction rechDicho (tab, nbre, val) retourne(entier)
{renvoie un indice où se trouve val s'il est dans tab, -1 sinon}
paramètre s (D) tab : tableau [1, MAX] d'entiers
(D) nbr, val : entier
variables trouvé : booléen ; id, if, im: entiers
début
trouvé  faux; id  0 ; if  nbre + 1
tant que non trouvé ET (if - id) > 1 faire
im  (id + if)/2
trouvé  (tab[im] = val)
si (tab[im] > val) alors if  im
sinon id  im
fsi
ftq
si (id = 0) alors retourne (-1)
sinon si (tab[id]=val) alors retourne(id)
sinon retourne (-1)
fsi
fsi
fin
2003-2004 Algorithmique 6 : Recherche, complexité, tris 18
Recherche dichotomique: variantel
fonction rechDicho (tab, nbre, val) retourne(entier)
{renvoie le plus grand indice où se trouve val s'il est dans tab, -1 sinon}
paramètre s (D) tab: tableau [1, MAX] d'entiers
(D) nbr, val: entier
variables id, if, im: entiers
début
id  0; if  nbre+1
tant que (if - id) > 1 faire
im  (id + if)/2
si (tab[im] > val) alors if  im
sinon id  im
fsi
ftq
si (id = 0) alors retourne (-1)
sinon si (tab[id]=val) alors retourne(id)
sinon retourne (-1)
fsi
fsi
fin
2003-2004 Algorithmique 6 : Recherche, complexité, tris 19
Recherche dichotomique : variante2
fonction rechDicho (tab, nbre, val) retourne (entier)
{renvoie le plus petit indice où se trouve val s'il est dans tab, -1 sinon}
paramètre s (D) tab: tableau [1, MAX] d'entiers
(D) nbr, val: entier
variablesid, if, im: entier
début
id  0 ; if  nbre+ 1
tant que (if - id) > 1 faire
im  (id + if)/2
si (tab[im]  val) alors if  im
sinon id  im
fsi
ftq
si (if = nbre + 1) alors retourne (-1)
sinon si (tab[if]=val) alors retourne(if)
sinon retourne(-1)
fsi
fsi
fin
2003-2004 Algorithmique 6 : Recherche, complexité, tris 20
Recherche dans un ABR
fonction rech (unAbr, val) retourne(booléen)
{renvoieVRAl si val se trouve dans l'ABR unAbr, FAUXsinon}
paramètre s (D) unAbr: ABR
(D) val: entier
variables trouvé: booléen ; id, if, im: entiers
début
si unAbr.Vide() alors retourner (FAUX)
sinon si (unAbr.Info() = val)
alors retourner(VRAI)
sinon si (unAbr.Info() < val)
alors retourner (Rech(unAbr.FD(), val))
sinon retourner (Rech(unAbr.FG(), val))
fsi
fsi
fsi
fin
2003-2004 Algorithmique 6 : Recherche, complexité, tris 21
32
18
9
5
2
24
27
20
36
19
13
8
12
15
17
7
Simulation de recherche
2003-2004 Algorithmique 6 : Recherche, complexité, tris 22
2003-2004 Algorithmique 6 : Recherche,
complexité, tris
23
Adressage Dispersé
24
Adressage dispersé
• Objectif: classer M éléments dans un tableau
• Principe: dans un tableau de p cases, on classe
l'élément x, à l’indice k, donné par une fonction
d'adressage h
- classer un élément x  entier k, compris entre 1 et p
• Fonction h: h(x)=k
- la valeur k ne dépend que de l'élément x ;
- l'élément x n'est pas placé relativement aux autres
éléments
25
Quelques exemples de fonctions
d’adressage
• x : chaîne h1(x) = nombre de caractères de la chaîne
h1("Paul") = 4 h1("MmeDupont")=9
• x : entier h2(x) = somme de ses chiffres décimaux
h2(342) = 9 h2(100 340) = 8
• x : entier h3(x)= nombre de bits à 1 dans l'écriture
binaire
h3(342) = h3(101010010) = 4
• x : chaîne de caractères
h4(x) = somme des codes ASCII des caractères de la chaîne
26
Exemple de classement par la
fonction d’adressage h1
• Suite de prénoms :
- Marc, Izabelle, Paule, Jeanne, Ali, Jo, Michèle
- Codes associés par h1 (nb caractères) : 4, 8, 5, 6, 3, 2, 7
• Constatations :
- la valeur k ne dépend que de l'élément x ;
- la place de l'élément x n'est pas déterminée relativement aux autres
éléments classés...
- ...à la différence d'un tri avec relation d'ordre où la place d'un élément
est déterminée par le nombre d'éléments "meilleurs" selon cet ordre.
Jo Ali Marc Paule Jeanne Michèle Izabelle
1 2 3 4 5 6 7 8
27
Une autre fonction d’adressage
• h5 associe à c1…ck la somme :
- (Somme (rang de ci dans l’alphabet * i) modulo 9) +1
• Suite de prénoms : Marc, Izabelle, Paule, Jeanne, Jo,
Michèle
- h5 (Marc) = ((13*1+1*2+18*3+3*4) mod 9) + 1 = 81 mod 9 + 1 = 1
- h5 (Jeanne) = ((10*1+5*2+1*3+14*4+14*5+5*6) mod 9) + 1
= 179 mod 9 + 1 = 9
– h5 (Paule) = ((16*1+1*2+21*3+12*4+5*5) mod 9) + 1 = 1 mod 9 + 1 = 2
Marc Paule Jo Izabelle Michèle Jeanne
1 2 3 4 5 6 7 8 9
28
Recherche d’un élément
Algorithme de recherche d'un élément x dans
une table construite par adressage dispersé
d'une suite d'éléments :
1) on calcule le code associé à cet élément x par la
fonction d’adressage, soit p.
2) on compare le contenu de la p-ième case de la table
avec l’élément x : si identité, la recherche est positive,
sinon elle est négative.
29
Ajout d’un élément
Algorithme d'ajout d'un élément X dans une
table construite par adressage dispersé d'une
suite d'éléments:
1) on calcule le code associé à cet élément par la
fonction d'adressage, soit p.
2) on affecte l'élément à la p-ième place dans la table,
à condition toutefois que cette place ne soit pas
déjà occupée  risque de collision
30
Exemples (avec h5 )
• Recherche de "Isabelle"
- code associé par h5 : 1 et tabAdrDisp [1]  "Isabelle "
 recherche négative
• Ajout de "Ali"
- code associé par h5 : 8 ; tabAdrDisp [8] : " "
 ajout possible
• Ajout de "Lola"
- code associé par h5 : 2 ; or tabAdrDisp [2] : "Paule"
 collision
Marc Paule Jo Izabelle Michèle Ali Jeanne
1 2 3 4 5 6 7 8 9
31
Méthodes de résolution des
collisions : méthodes internes
• lnternes car on opère dans le tableau alloué
- première possibilité : on utilise la place libre dans le tableau
• Algorithme d'ajout d'un élément entré en collision :
- à partir du rang de la collision, rechercher la première place libre et y
placer l'élément entré en collision.
- arrivé à la dernière case du tableau, continuer la recherche à la première
case du tableau.
• Exemples: "Lola" (avec h5 : 2) et "Isabelle" (avec h5 : 1)
Marc Paule Lola Isabelle Jo Izabelle Michèle Ali Jeanne
1 2 3 4 5 6 7 8 9
32
Retrait d’un élément
1) on calcule le code associé à cet élément x par la
fonction d'adressage : soit p ;
2) on compare le contenu de la p-ième case de la table
avec l'élément x :
• si identité, on le supprime puis on place dans cette
case une marque pour indiquer que l'élément
supprimé a pu provoquer d'éventuelles collisions
• si non identité, on poursuit la recherche
séquentiellement en cas d'éventuelles collisions
• arrêt si case vide ou parcours jusqu’à (p-1)
33
Recherche d’un élément
1) on calcule le code associé à cet élément x par la
fonction d'adressage : soit p.
2) on compare le contenu de la p-ième case de la table
avec l'élément x :
• si identité, la recherche est positive,
• sinon on poursuit la recherche séquentiellement, en
cas d’éventuelles collisions (utiliser les marques)
• arrêt avec recherche négative si case vide ou
parcours jusqu’à (p-1)
34
Exemples (avec h5 )
retrait de «Marc» (code 1)
Marc Paule Lola Isabelle Jo Izabelle Michèle Ali Jeanne
1 2 3 4 5 6 7 8 9
X Paule Lola Isabelle Jo Izabelle Michèle Ali Jeanne
1 2 3 4 5 6 7 8 9
retrait de «Ali» (code 8)
recherche de «Isabelle» (code 1)
X Paule Lola Isabelle Jo Izabelle Michèle Ali Jeanne
1 2 3 4 5 6 7 8 9
X Paule Lola Isabelle Jo Izabelle Michèle X Jeanne
1 2 3 4 5 6 7 8 9
35
Résolution interne des collisions
(suite)
• Deuxième solution: on partitionne le tableau en
deux :
- une zone d'adressage primaire
- une zone de débordement
• Algorithme d'ajout d'un élément entré en collision :
rechercher une place libre dans la zone de
débordement et y placer l'élément entré en
collision
36
Exemple
• Ajout de «Lola» (code associé par h5 : 2)
• puis de «Isabelle» (code associé par h5 : 1)
Marc Paule Jo Izabelle Michèle Ali Jeanne
1 2 3 4 5 6 7 8 9
Lola Isabelle
10 11 12 13 14 15
Zone de
débordement
(à la « suite »
du tableau)
37
Recherche …
1) on calcule le code associé à cet élément x par la
fonction d'adressage, soit p
2) on compare le contenu de la p-ième case de la table
avec l'élément x : si identité, la recherche est positive,
sinon on mène une recherche séquentielle dans la
zone de débordement du tableau
38
… et retrait
1) on calcule le code associé à cet élément x par la
fonction d'adressage, soit p
2) on compare le contenu de la p-ième case de la table
avec l'élément x :
• si identité, on le supprime puis on place dans cette
case une marque pour indiquer que l'élément
supprimé a pu provoquer d'éventuelles collisions
• si non identité, poursuivre la recherche
séquentiellement en cas d'éventuelles collisions,
dans la zone de débordement du tableau
39
Exemples
Recherche de «Ali» (h5 : 8), puis «Lola» (h5 : 2)
Retrait de «Marc» (h5 : 1)
Recherche «Isabelle» (h5 : 1)
Marc Paule Jo Izabelle Michèle Ali Jeanne
1 2 3 4 5 6 7 8 9
Lola Isabelle
10 11 12 13 14 15
40
Méthodes de résolution externe des
collisions
• "Externes " car on alloue des zones de stockage
supplémentaires
• Le tableau contient, pour un code donné, deux
informations :
- une place de rangement d'un élément (principal) ;
- une liste de débordement pour les éléments entrés
en collision avec l'élément précédent
41
Ajout d’un élément
• Algorithme d'ajout d'un élément entré en collision :
- Créer la liste de débordement associée à ce code si
celle-ci n'existe pas encore,
- puis ajouter à cette liste le nouvel élément
• Exemple (avec h5): ajout de « Lola » (code 2)
Lola
Marc Paule Jo Izabelle Michèle Ali Jeanne
1 2 3 4 5 6 7 8 9
42
Exemples (suite)
Lola
ajout de « Isabelle » (1)
Isabelle
Marc Paule Jo Izabelle Michèle Ali Jeanne
1 2 3 4 5 6 7 8 9
ajout de « José » (1)
Marc Paule Jo Izabelle Michèle Ali Jeanne
1 2 3 4 5 6 7 8 9
Isabelle
José Lola
43
Recherche d’un élément
1) on calcule le code associé à cet élément x par la
fonction d'adressage, soit p
2) on compare le contenu de la première information de
la p-ième case de la table avec l'élément x
• si identité, la recherche est positive ;
• sinon, on mène une recherche séquentielle dans
la liste associée
• recherche de « Michèle » (7),
• puis « Isabelle » (1)
Marc Paule Jo Izabelle Michèle Ali Jeanne
1 2 3 4 5 6 7 8 9
José Lola
Isabelle
44
Retrait d’un élément
1) on calcule le code associé à cet élément x par la fonction
d'adressage, soit p
2) on compare le contenu de la première information de la p-ième
case de la table avec l'élément x
• si identité, on retire l’élément et on le remplace par l'élé-
ment placé en tête de la liste associée, quand elle existe ;
• sinon on mène une recherche séquentiellement dans la
liste associée, avec retrait si la recherche est positive
• retrait de « Michèle » (7),
• puis « Lola » (2) et enfin « Marc » (1)
Marc Paule Jo Izabelle Michèle Ali Jeanne
1 2 3 4 5 6 7 8 9
Isabelle
José Lola
45
Algorithmes de la méthode
d'adressage dispersé avec résolution
externe
type Info2 = agrégat
principal : chaîne {première chaîne associée à un code donné}
débord : Liste {objet Liste dont l'information est une chaîne}
fin
fonction code (uneChaîne) retourne (entier)
{retourne la valeur donnée par la fonction d’adressage}
paramètre (D) uneChaîne : chaîne
46
Procédure ajout (table, laChaîne)
{ajoute l'élément laChaîne dans une table, par adressage dispersé, avec
résolution externe des collisions}
paramètres (D/R) table: tableau [1, TAILLEMAX] de Info2
(D) laChaîne : chaîne
variables ok: booléen
ind: entier
début
ind  code(laChaîne)
si table[ind].principal = " "
alors {c'est la première occurrence de ce code d'adressage}
table[ind].principal  laChaîne
sinon {il y a collision: la place principale est déjà occupée, d’où
ajout dans la liste de débordement,en tête}
table[ind].débord.premier()
table[ind].débord.insèreAvant(laChaîne)
fsi
fin
47
Fonction recherche (table, laChaîne) retourne (booléen)
{recherche si l'élément laChaîne est présent dans une table, par adressage
dispersé, avec résolution externe des collisions}
paramètres (D) table: tableau [1, TAILLEMAX] de Info2
(D) laChaîne : chaîne
variables trouvé, ok: booléens; ind : entier
début
ind  code(laChaîne)
trouvé  table[ind].principal = laChaîne
si non trouvé {recherche de laChaîne dans la liste de débordement}
alors table[ind].débord.premier()
tant que non trouvé et
non table[ind].débord.horsListe() faire
trouvé  (table[ind].débord.info() = laChaîne)
table[ind].débord.suivant()
ftq
fsi
retourne (trouvé)
fin
48
Fonction retrait (table, laChaîne) retourne booléen
{retire, si possible, l’élément laChaîne d’une table construite par adressage
dispersé avec résolution externe des collisions}
paramètres (D/R) table: tableau [1, TAILLEMAX] de Info2
(D) laChaîne : chaîne
variables ok : booléen; ind : entier
début
ind  code(laChaîne)
trouvé  (table[ind].principal = laChaîne)
si trouvé {alors retrait de laChaîne du champ principal de la table}
alors retraitPrincipal (table, laChaîne, ind)
sinon {recherche, et éventuel retrait, de laChaîne dans la liste de
débordement}
ok  rechercheRetraitDeborde (table, laChaîne, ind)
fsi
retourne (ok)
fin
49
Procédure retraitPrincipal (table, laChaîne, ind)
{retire l’élément laChaîne du champ Principal du code adresse ind; ce champ
reçoit la valeur de tête de la liste de débordement si possible}
paramètres (D/R) table: tableau [1, TAILLEMAX] de Info2
(D) laChaîne : chaîne; ind : entier
variables elt : Info2; ind : entier
début
si (table[ind].débord.vide()) {il n’y a pas eu de collision sur ce code}
alors {ce code n’adresse plus aucune chaîne}
table[ind].principal  " "
sinon {on récupère l’élément en tête de liste de débordement}
table[ind].débord.premier() ; elt  table[ind].débord.info()
{pour mettre sa valeur dans le champ principal}
table[ind].principal  elt
{et puis on retire la cellule de tête de la liste de débordement}
table[ind].débord.supprimer()
fsi
fin
50
Fonction rechercheRetraitDéborde(table, laChaîne,ind)
{recherce et retire, si possible, l’élément laChaîne de la liste de débordement du
code adresse ind}
paramètres (D/R) table: tableau [1, TAILLEMAX] de Info2
(D) laChaîne : chaîne; ind : entier
variable trouvé : booléen
début
table[ind].débord.premier()
trouvé  faux
{recherche de laChaîne dans la !iste de débordement}
tant que non trouvé et non table[ind].débord.horsListe() faire
trouvé  (table[ind].débord.info() = laChaîne )
si non trouvé alors table[ind].débord.suivant()
ftq
{si trouvé, alors retrait dans la liste de débordement de la table}
si trouvé
alors table[ind].débord.supprimer() {le curseur est placé sur laChaîne}
retourne (trouvé)
fin
2003-2004 Algorithmique 6 : Recherche,
complexité, tris
51
Complexité des algorithmes
2003-2004 Algorithmique 6 : Recherche, complexité, tris 52
Complexité des algorithmes
• Complexité temporelle, complexité spatiale
coût en temps: temps nécessaire à l'exécution
coût en espace: espace mémoire nécessaire
• Pire des cas, complexité moyenne
- la complexité dans le pire des cas n'est pas nécessairement une bonne
indication du coût en pratique (exemple de la méthode du simplexe)
- comment estimer le cas moyen ?
• Étude a priori, bancs d'essai et évaluation a posteriori
- étude théorique
- étude pratique de l'algorithme implémenté, bancs d'essai
2003-2004 Algorithmique 6 : Recherche, complexité, tris 53
Complexité d'un problème, complexité d’un
algorithme
• contraintes sur un problème
par exemple, recherche d'un élément dans un tableau de n
éléments non triés : si l'élément n'est pas présent, n
comparaisons seront nécessaires pour le constater
• Attention: si le tableau est trié, une seule peut être
suffisante !
- parmi les différents algorithmes possibles, certains sont meilleurs que
d'autres
- la comparaison des pires des cas peut ne pas être une bonne indication
2003-2004 Algorithmique 6 : Recherche, complexité, tris 54
Complexité asymptotique
• Nécessité d'étudier la complexité pour de grosses
quantités de données
• Exemple : deux algorithmes pour une même tâche:
- A1 effectue n2 opérations de base, A2 effectue n.log2 n opérations
• Deux machines :
- M1 effectue 210 (environ mille) opérations par sçconde
- M2 effectue 220 (environ un million d') opérations par seconde
• Temps de calcul (en secondes) :
2003-2004 Algorithmique 6 : Recherche, complexité, tris 55
M1 M2
A1 A2 A1 A2
n = 210 210 10 1 < 0,01
n = 220 230 20. 210 220 20
Complexité asymptotique (2)
2003-2004 Algorithmique 6 : Recherche, complexité, tris 56
Rapidité de croissance comparée
de certaines fonctions usuelles
2003-2004 Algorithmique 6 : Recherche, complexité, tris 57
Calcul de la complexité d’un algorithme
• Calcul de la valeur d'un polynôme en un point
1. p  a[0]
2. pour i 1 à n faire {puissance(a, n) retourne an}
3. xpi  puissance (x , i)
4. p  p + a[i]* xpi
fpour
• Nombre de multiplications
en 3 --> 1+2+3+...+ (n-1) = (n-l)n/2
en4 --> n
• Nombre d'additions en 4 --> n
• soit au total: n(n + 3)/2 < n2 pour n > 3.
2003-2004 Algorithmique 6 : Recherche, complexité, tris 58
Notations utilisées
• Grand O
f(n) = 0(g(n)) s'il existe C> 0 et no > 0 tels que
f(n)  C. g(n) pour tout n  no
• Grand oméga
f(n) = Ω(g(n)) s'il existe C> 0 et no > 0 tels que
f(n)  C. g(n) pour tout n  no
• Grand thêta
f(n) = Θ(g(n)) s'il existe C1 et C2 > 0 et no > 0 tels que
C1.g(n)  f(n)  C2. g(n) pour tout n  no
2003-2004 Algorithmique 6 : Recherche, complexité, tris 59
Exemples
• f(n) = O(1) f est majorée
• f(n) = Ω (1) f est minorée
3n+2 = O(n) 3n+3 = O(n)
100n+6 = O(n)
10n2+4n+2=O(n2) 3n+3 = O(n2)
1000n2 + 100 n -6 = O(n2) 10n2+4n+2= O(n4)
6*2n + n2 = O(2n)
• ----> c'est la plus petite fonction g(n) qui est
intéressante
2003-2004 Algorithmique 6 : Recherche, complexité, tris 60
Exemples (suite)
3n+3 = Ω (n)
100n+6 = Ω (n)
10n2+4n+2= Ω (n2)
6*2n + n2 = Ω (n2) 6*2n + n2 = Ω (n)
6*2n + n2 = Ω (1)
• ----> c'est la plus grande fonction g(n) qui est
intéressante
2003-2004 Algorithmique 6 : Recherche, complexité, tris 61
Temps d’exécution des algorithmes
• Temps constant (rares algorithmes, cf. adressage
dispersé) O(1)
• Temps logarithmique (exemple: recherche
dichotomique) O(log2n)
• Temps linéaire (exemple: recherche séquentielle) O(n)
• Temps polynomial O(nk) (coûteux si k dépasse 3)
- quadratique O(n2)
- cubique O(n3)
• Temps exponentiel O(cn) (à éviter en général)
2003-2004 Algorithmique 6 : Recherche, complexité, tris 62
Comparaison des complexités d'algorithmes de la
même classe
• Calcul de la valeur d'un polynôme en un point (1)
p  a[0]
pour i  1 à n faire
xpi  puissance(x, i)
p  p + a[i]* xpi
fpour
n(n+1)/2 multiplications, n additions : algorithme en O(n2)
2003-2004 Algorithmique 6 : Recherche, complexité, tris 63
Calcul de la valeur d'un polynôme en un point (2)
p  a[0]
xpi  1
pour i  1 à n faire
xpi  xpi * x
p  p + a[i]* xpi
fpour
2n multiplications, n additions : algorithme en O(n)
2003-2004 Algorithmique 6 : Recherche, complexité, tris 64
• Calcul de la valeur d'un polynôme en un point (3)
p  a[n]
pour i  n - 1 à 0, pas -1 faire
p  p*x + a[i]
fpour
n multiplications, n additions algorithme en O(n)
Complexité optimale pour cette classe d'algorithmes :
en O(n)
2003-2004 Algorithmique 6 : Recherche, complexité, tris 65
Calcul de la complexité d’algorithmes de recherche simples
• Opérations élémentaires retenues: les
comparaisons
1. Recherche séquentielle dans un tableau non
trié
- complexité au pire n comparaisons
- complexité moyenne n/2 comparaisons
algorithme en O(n)
2. Recherche séquentielle dans un tableau trié
- complexité au pire n comparalsons
- complexité moyenne n/2 comparaisons
algorithme en O(n)
2003-2004 Algorithmique 6 : Recherche, complexité, tris 66
• Recherche dichotomique (dans un tableau trié 1)
- complexité au pire = complexité moyenne =
nombre p d'intervalles considérés
• Exemple avec n = 8 = 23 tableau de 8 éléments
niveau 0
niveau 1
niveau 2
niveau 3
Profondeur de l’arbre de décision de l’ordre de log2n :
complexité algorithmique en O(log2n)
2003-2004 Algorithmique 6 : Recherche,
complexité, tris
67
Tris
2003-2004 Algorithmique 6 : Recherche, complexité, tris 68
Tris
• Données dans un ensemble d'éléments S muni d'un ordre total
ordre | a < a (réflexif)
partiel | a < b et b < c => a < c (transitif)
| a ~ b et b < a => a = b (antisymétrique)
total | a,b a=b OU a<b OU b<a (total)
• Problème du tri
éléments al, ..., an ~ S donnés
trouver une permutation p: { 1, . . ., n} { 1, . . .,n} telle que
ap(1)  …  ap(n)
En général, on s'intéresse plutôt au résultat de l'application de p
2003-2004 Algorithmique 6 : Recherche, complexité, tris 69
• Tris internes et tris externes
- internes: l'ensemble des données peut être traité en mémoire
centrale
- externes: on opère sur une partie des données seulement
• Tris d'entiers: méthode des seaux
à trier: des entiers entre 1 et m
principe:
- on crée m files d'attente vides numérotées 0, …, m-1
- on parcourt linéairement les données, et on place ai
dans la file numérotée ai
- on place les files d'attente bout à bout
2003-2004 Algorithmique 6 : Recherche, complexité, tris 70
• Exemple m = 10, 4 7 3 2 8 1 5
• Résultat: 1, 2, 3, 4, 5,
• Estimation du coût :
- chaque élément peut être placé dans une file en temps
constant, d'où O(n) pour les n éléments ;
- concaténation de m files en O(m) ;
- si m = 0(n), coût total en O(n).
1 2 3 4 5 7 8
0 1 2 3 4 5 6 7 8 9
2003-2004 Algorithmique 6 : Recherche, complexité, tris 71
• Cette méthode peut être généralisée à des k-uplets d'entiers
munis de l'ordre lexicographique, et plus généralement à des
chaînes (de longueur variable):
(s1,..., sp) < (t1,..., tq) si et seulement si
• ou bien p < q et si = ti pour 1  i  p (s est un préfixe de t);
• ou bien il existe j tel que si < tj et si = ti pour tout i < j.
• Exemples:
634 < 63472 tri < triage
64589 < 647 seau < selle
• Pour des suites de k-uplets dont chaque composante est un entier
entre 0 et m-l, on obtient un algorithme de coût O((m+n)k).
2003-2004 Algorithmique 6 : Recherche, complexité, tris 72
Cas général:
- on trie des éléments quelconques munis d'un ordre (total)
- la seule opération disponible est la comparaison de deux éléments
Exemple: tri de trois éléments a, b, c
a<b
b<c a<c
a<c b<c
a, b, c
a, c, b
b, a, c
c, a, b b, c, a c, b, a
2003-2004 Algorithmique 6 : Recherche, complexité, tris 73
Estimation du coût
• Arbre binaire de hauteur h => au plus 2h feuilles
•Théorème Un arbre de décision pour n éléments a une hauteur supérieure ou
égale à log(n!).
- En effet, un arbre de décision doit avoir au moins autant de feuilles que de
résultats possibles, c'est-à-dire n! feuilles au moins. Donc la hauteur de cet arbre
est  log(n!)
• Estimation
Formule de Stirling: n! approximé par (n/e)n, donc le nombre de tests nécessaires est
minoré par n(logn - log e) = nlog n -1,44n
• => on ne peut pas espérer faire mieux que O(n log n)
2003-2004 Algorithmique 6 : Recherche, complexité, tris 74
Méthodes de tri élémentaires (1)
Tri par sélection
• Données: un tableau de n éléments à trier
• Principe: pour chaque position successive dans le tableau, on cherche l'élément
qui occupera cette position dans le tableau trié, et on l'y place en permutant
cet élément avec l'élément courant.
liste triée
liste triée
case courante
devrait se trouver
dans la case courante
reste à trier
reste à trier
2003-2004 Algorithmique 6 : Recherche, complexité, tris 75
20 18 9 5 24 13 27 2 8 32 7 12 36 15 17 19
2003-2004 Algorithmique 6 : Recherche, complexité, tris 76
Algorithme de tri par sélection
procédure triSélection (tab, nbre)
{recherche pour chaque case l'élément qui doit y être affecté et y place cet
élément}
paramètre s (D/R) tab: tableau [1, MAX] d'entiers
(D) nbre: entier
variables indDuMin, position: entier
début
pour position  1 à nbre -1 faire
indDuMin  sélection(tab, nbre, position,nbre)
{recherche l’indice de l’élément minimum entre position et la fin de tab}
échanger(tab, position, indDuMin) {échange deux positions dans tab}
fpour
fin
2003-2004 Algorithmique 6 : Recherche, complexité, tris 77
Algorithme de tri par sélection (2)
fonction sélection (tab, nbre, indDébut,indFin) retourne(entier)
{recherche l'indice de l'élément minimum de tab entre indDébut et indFin}
paramètre s (D) tab: tableau [1, MAX1 d'entiers
(D) nbre, indDébut, indFin : entiers
variables indDuMin, ind: entiers
début
indDuMin  indDébut
pour ind  (indDébut + 1) à indFin faire
si tab[indDuMin] > tab[ind] alors indDuMin  ind
fpour
retourner(indDuMin)
fin
2003-2004 Algorithmique 6 : Recherche, complexité, tris 78
Méthodes de tri élémentaires (1)
Tri par insertion
• Données: un tableau de n éléments à trier
• Principe: la partie gauche est triée; on essaie d'insérer chaque nouvel élément
dans cette liste, en décalant d'un cran la partie droite restante.
liste triée
liste triée
place du nouveau
reste à trier
nouveau
reste
reste
2003-2004 Algorithmique 6 : Recherche, complexité, tris 79
20 18 9 5 24 13 27 2 8 32 7 12 36 15 17 19
2003-2004 Algorithmique 6 : Recherche, complexité, tris 80
Algorithme de tri par insertion
procédure triInsertion (tab, nbre)
{recherche pour chaque élément la case où il doit être affecté et y place cet
élément}
paramètre s (D/R) tab: tableau [1, MAX] d'entiers
(D) nbre: entier
variables indVal, numPlace: entiers
début
pour indVal  2 à nbre faire
{recherche de 1'endroit où doit s'insérer la valeur placée en indVal}
numPlace  Insertion(tab, nbre, indVal)
{si la valeur n'est pas à insérer en fin de zône triée, l'insérer à la place voulue}
si (numPlace  indVal ) alors
{libère la position numPlace par décalage et y place tab[indVal]}
décalerEtPlacer(tab, numPlace, indVal)
fsi
fpour
fin
2003-2004 Algorithmique 6 : Recherche, complexité, tris 81
procédure décalerEtPlacer(tab, nPlace, indVal)
{libère la position nPlace par décalage et y place tab[indVall}
paramètre s (D/R) tab: tableau [1, MAX] d'entiers
(D) nPlace, indVal: entiers
variables indDuMin, ind, deCôté: entiers
début
deCôté  tab[indVal]
{faire un trou au rang nPlace en décalant les valeurs qui suivent d'un rang vers la droite}
pour ind  indVal à nPlace + 1 pas -1 faire tab[ind]  tab[ind-1]
fpour
tab[nPlace]  deCôté
fin
2003-2004 Algorithmique 6 : Recherche, complexité, tris 82
Simulation du décalage
2003-2004 Algorithmique 6 : Recherche, complexité, tris 83
Deux algorithmes pour la recherche de place
1. Recherche séquentielle dans un tableau trié
fonction insertion (tab, nbre, indV) retourne(entier)
{renvoie la place à laquelle il faut affecter tab[indV] pour respecter l'ordre}
paramètre s (D) tab: tableau [1, MAX] d'entiers
(D) nbr, indV: entiers
variables dépassé: booléen; i, val, nbValTriées: entiers
début
val  tab[indV]; nbValTriées  indV - 1
dépassé  faux; i  0
tant que i < nbValTriées ET non dépassé faire
ii+ 1
dépassé  (tab[i] > val)
ftq
si dépassé alors retourne (i) sinon retourne (i+l) fsi
fin
2003-2004 Algorithmique 6 : Recherche, complexité, tris 84
Simulation du tri par insertion séquentielle
2003-2004 Algorithmique 6 : Recherche, complexité, tris 85
2. Recherche dichotomique
fonction insertion (tab, nbre, indV) retourne (entier)
{renvoie la place à laquelle ilfaut affecter tab[indV] pour respecter l'ordre}
paramètre s (D) tab: tableau [1, MAX] d'entiers
(D) nbr, indV: entiers
variables id, if, im, val: entiers
début
val  tab[indV]; id  0 if  indV + 1
tant que if - id > 1 faire
im  (id + if)/2
si (tab[im] > val) alors if im sinon id im fsi
ftq
retourne (id + 1)
fin
2003-2004 Algorithmique 6 : Recherche, complexité, tris 86
Simulation du tri par insertion dichotomique
2003-2004 Algorithmique 6 : Recherche, complexité, tris 87
Complexité des tris élémentaires
• Coût du tri par sélection
- on fait (n-l) + (n-2) + ... + 1 tests de comparaison, soit en tout:
n(n-l)/2 comparaisons
- on peut être amené à faire n-1 échanges
=> algorithme en O(n2)
• Coût du tri par insertion:
- en moyenne n2/4 comparaisons
- n2/8 échanges deux fois plus dans le pire des cas
=> ici encore algorithme en O(n2)
2003-2004 Algorithmique 6 : Recherche, complexité, tris 88
Tris indirects
• Problème : tri sur différents critères
• On veut mémoriser les résultats des tris par
nom, par taille, par date
Rep[1] Rep[2] Rep[3]
nom toto.C toto.o toto
taille 20 457 3 456 5 248
date 12.04.01 13.04.01 15.04.1
2003-2004 Algorithmique 6 : Recherche, complexité, tris 89
Solution : utilisation
de tableaux d’indices
• On utilise trois tableaux différents qui
contiennent non les agrégats, mais les
indices des agrégats dans le tableau
3 1 2
triNom
triTaille
triDate
2 3 1
1 2 3
2003-2004 Algorithmique 6 : Recherche, complexité, tris 90
Tris indirects (suite)
• Dans l’algorithme de tri, la comparaison de
deux agrégats se fait relativement à un
critère (nom, taille, date) :
précède(i, j, Critère, tab)
fonction qui retourne vrai si le fichier tab[i]
précède le fichier tab[j] relativement au
critère Critère
2003-2004 Algorithmique 6 : Recherche,
complexité, tris
91
Fin du volume 6

Contenu connexe

Similaire à coursAlgo_V6.ppt

cours TRI selection insertion bublle sort
cours TRI selection insertion bublle sortcours TRI selection insertion bublle sort
cours TRI selection insertion bublle sortYounesOuladSayad1
 
RCarte_Commandes-R.pdf
RCarte_Commandes-R.pdfRCarte_Commandes-R.pdf
RCarte_Commandes-R.pdfDrissRifai1
 
chap2 algorithme de recherche.pdf
chap2 algorithme de recherche.pdfchap2 algorithme de recherche.pdf
chap2 algorithme de recherche.pdfdonixwm
 
Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)DriNox NordisTe
 
Héritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdfHéritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdfAabidiHafid
 
UML OCL : Cheat Sheet - 10
UML OCL : Cheat Sheet - 10UML OCL : Cheat Sheet - 10
UML OCL : Cheat Sheet - 10megaplanet20
 
Omp math nombres-complexes
Omp math nombres-complexesOmp math nombres-complexes
Omp math nombres-complexesAhmed Ali
 
Devoir Math Bac 2011_La Correction
Devoir Math Bac 2011_La CorrectionDevoir Math Bac 2011_La Correction
Devoir Math Bac 2011_La CorrectionAchraf Frouja
 

Similaire à coursAlgo_V6.ppt (11)

cours TRI selection insertion bublle sort
cours TRI selection insertion bublle sortcours TRI selection insertion bublle sort
cours TRI selection insertion bublle sort
 
Python avancé : Tuple et objet
Python avancé : Tuple et objetPython avancé : Tuple et objet
Python avancé : Tuple et objet
 
RCarte_Commandes-R.pdf
RCarte_Commandes-R.pdfRCarte_Commandes-R.pdf
RCarte_Commandes-R.pdf
 
chap2 algorithme de recherche.pdf
chap2 algorithme de recherche.pdfchap2 algorithme de recherche.pdf
chap2 algorithme de recherche.pdf
 
Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)
 
Type abstrait de données
Type abstrait de donnéesType abstrait de données
Type abstrait de données
 
Héritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdfHéritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdf
 
UML OCL : Cheat Sheet - 10
UML OCL : Cheat Sheet - 10UML OCL : Cheat Sheet - 10
UML OCL : Cheat Sheet - 10
 
Omp math nombres-complexes
Omp math nombres-complexesOmp math nombres-complexes
Omp math nombres-complexes
 
Devoir Math Bac 2011_La Correction
Devoir Math Bac 2011_La CorrectionDevoir Math Bac 2011_La Correction
Devoir Math Bac 2011_La Correction
 
fichiers arborescents
fichiers arborescentsfichiers arborescents
fichiers arborescents
 

Dernier

Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfmia884611
 
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenusGAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenusInstitut de l'Elevage - Idele
 
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...Institut de l'Elevage - Idele
 
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...Institut de l'Elevage - Idele
 
JTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfJTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfInstitut de l'Elevage - Idele
 
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...Institut de l'Elevage - Idele
 
JTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfJTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfInstitut de l'Elevage - Idele
 
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...Institut de l'Elevage - Idele
 
comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestionyakinekaidouchi1
 
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...Institut de l'Elevage - Idele
 
GAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engageGAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engageInstitut de l'Elevage - Idele
 
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfJTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfInstitut de l'Elevage - Idele
 
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...Institut de l'Elevage - Idele
 
conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de planchermansouriahlam
 
Algo II : les piles ( cours + exercices)
Algo II :  les piles ( cours + exercices)Algo II :  les piles ( cours + exercices)
Algo II : les piles ( cours + exercices)Sana REFAI
 
WBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdfWBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdfSophie569778
 
GAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversitéGAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversitéInstitut de l'Elevage - Idele
 

Dernier (20)

Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdf
 
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenusGAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
 
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
 
JTC 2024 Bâtiment et Photovoltaïque.pdf
JTC 2024  Bâtiment et Photovoltaïque.pdfJTC 2024  Bâtiment et Photovoltaïque.pdf
JTC 2024 Bâtiment et Photovoltaïque.pdf
 
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
 
JTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfJTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdf
 
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
 
JTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfJTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdf
 
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
 
comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestion
 
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
 
GAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engageGAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engage
 
CAP2ER_GC_Presentation_Outil_20240422.pptx
CAP2ER_GC_Presentation_Outil_20240422.pptxCAP2ER_GC_Presentation_Outil_20240422.pptx
CAP2ER_GC_Presentation_Outil_20240422.pptx
 
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfJTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
 
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
 
conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de plancher
 
Algo II : les piles ( cours + exercices)
Algo II :  les piles ( cours + exercices)Algo II :  les piles ( cours + exercices)
Algo II : les piles ( cours + exercices)
 
WBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdfWBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdf
 
GAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversitéGAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversité
 
JTC 2024 - DeCremoux_Anomalies_génétiques.pdf
JTC 2024 - DeCremoux_Anomalies_génétiques.pdfJTC 2024 - DeCremoux_Anomalies_génétiques.pdf
JTC 2024 - DeCremoux_Anomalies_génétiques.pdf
 

coursAlgo_V6.ppt

  • 1. Algorithmique : Volume 6 • Recherche • Adressage dispersé • Tris • Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat iUT ORSA Y Université Paris XI I.U.T. d'Orsay Département Informatique Année scolaire 2003-2004
  • 2. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 2 Recherche
  • 3. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 3 Recherche • Problème général abstrait ensemble de valeurs E, élément a; est-ce que a  E? réponse: booléen (x) { xE | x=a } • plus généralement existe-t-il x vérifiant certains critères (x) { xE | j(x)} trouver tous les x satisfaisant certains critères { xE | j(x)} (bases de données)
  • 4. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 4 Recherche en informatique • On ne travaille pas sur des ensembles mathématiques, mais sur des structures de données particulières • Les données peuvent être de nature complexe (agrégats, classes) • Exemples : tableau tableau trié 20 18 9 5 24 13 27 2 8 32 7 12 36 15 17 19 2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36
  • 5. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 5 32 18 9 5 2 24 27 20 36 19 13 8 12 15 17 7 arbre binaire de recherche
  • 6. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 6 Tri de données complexes • Exemple de donnée complexe: type Etudiant = agrégat nom: chaîne âge: entier classement: entier photo: fichier_GIF fin • on peut trier par nom (ordre alphabétique), par âge, par classement • pas par photo • clés, clés primaires ex-aequo, même âge
  • 7. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 7 Recherche et type de données • On utilise divers types de données sur lesquelles on fait des opérations de base: - ajout - suppression - mise-à jour - consultation • Chaque structure a des avantages et des inconvénients : • tableau, tableau trié, arbre binaire, liste chaînée, etc.
  • 8. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 8 Recherche séquentielle fonction rechSeq (tab , nbre , val) retourne (booléen) {renvoie VRAI si val est dans tab, FAUX sinon} paramètre s (D) tab: tableau[1, MAX] d'entiers (D) nbr, val: entier variables trouvé: booléen i: entier début trouvé  faux i  0 tant que non trouvé ET i < nbr faire i  i+ 1 trouvé  (tab[i] = val) ftq retourne (trouvé) fin
  • 9. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 9 fonction rechSeq (tab, nbre, val) retourne(entier) {renvoie le premier indice où se trouve val dans tab, -1 sinon} paramètre s (D) tab: tableau [1, MAX] d'entiers (D) nbr, val: entier variables trouvé: booléen i: entier début trouvé  faux i  0 tant que non trouvé ET i < nbr faire i  i+1 trouvé  (tab[i] = val) ftq si trouvé alors retourne (i) sinon retourne (-1) fsi fin
  • 10. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 10 Recherche avec critères procédure rechLesMin (tab_d, nbre_d, tab_r, nbre_r, val) {renvoie dans le tableau tab_r les éléments de tab_d  val} paramètre s (D) tab_d: tableau [1, MAX] d'entiers, nbr_d, val: entier (R) tab_r: tableau [1, MAX] d'entiers, nbr_r: entier variables id, ir: entiers début ir  0 pour id  l à nbre_d faire si (tab_d[id]  val) alors irir+ 1 tab_r[ir]  tab_d[id] fsi fpour fin
  • 11. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 11 fonction rechMin (tab, nbre) retourne(entier) {renvoie la plus petite valeur contenue dans le tableau tab} paramètre s (D) tab : tableau [1, MAX] d'entiers, nbr : entier variables i, min : entiers début imin  tab[l] pour id  2 à nbre faire si (tab[i] < min) alors min  tab[i] fsi fpour retourne (tab[min]) fin
  • 12. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 12 fonction rechPosMin (tab, nbre) retourne(entier) {retourne le (dernier) indice de la plus petite valeur du tableau tab} paramètre s (D) tab: tableau [1, MAX] d'entiers, nbr: entier variables i, imin, min: entiers début min tab[1] imin 1 pour id 2 à nbre faire si (tab[i]  min) alors min tab[i] imin  i fsi fpour retourne (imin) fin
  • 13. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 13 Recherche séquentielle dans tableau ordonné fonction rechSeq (tab, nbre, val) retourne(entier) {renvoie le premier indice où se trouve val s'il est dans tab, -1 sinon} paramètre s (D) tab: tableau [1, MAX] d'entiers (D) nbr, val: entier variables trouvé, dépassé : booléens ; i : entier début trouvé  faux; dépassé  faux; i  0 tant que non (trouvé OU dépassé) ET i < nbr faire i  i+ 1 trouvé  (tab[i] = val) dépassé  (tab[i] > val) ftq si trouvé alors retourne (i) sinon retourne(-1) fin
  • 14. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 14 Recherche dichotomique • Rappel: les valeurs doivent être triées ! Principe: on vise au milieu du tableau si l'élément visé est plus grand que val, il suffit de chercher à gauche ; s'il est plus grand, il suffit de chercher à droite 2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36
  • 15. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 15 2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36 2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36
  • 16. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 16 2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36 2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36
  • 17. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 17 Recherche dichotomique fonction rechDicho (tab, nbre, val) retourne(entier) {renvoie un indice où se trouve val s'il est dans tab, -1 sinon} paramètre s (D) tab : tableau [1, MAX] d'entiers (D) nbr, val : entier variables trouvé : booléen ; id, if, im: entiers début trouvé  faux; id  0 ; if  nbre + 1 tant que non trouvé ET (if - id) > 1 faire im  (id + if)/2 trouvé  (tab[im] = val) si (tab[im] > val) alors if  im sinon id  im fsi ftq si (id = 0) alors retourne (-1) sinon si (tab[id]=val) alors retourne(id) sinon retourne (-1) fsi fsi fin
  • 18. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 18 Recherche dichotomique: variantel fonction rechDicho (tab, nbre, val) retourne(entier) {renvoie le plus grand indice où se trouve val s'il est dans tab, -1 sinon} paramètre s (D) tab: tableau [1, MAX] d'entiers (D) nbr, val: entier variables id, if, im: entiers début id  0; if  nbre+1 tant que (if - id) > 1 faire im  (id + if)/2 si (tab[im] > val) alors if  im sinon id  im fsi ftq si (id = 0) alors retourne (-1) sinon si (tab[id]=val) alors retourne(id) sinon retourne (-1) fsi fsi fin
  • 19. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 19 Recherche dichotomique : variante2 fonction rechDicho (tab, nbre, val) retourne (entier) {renvoie le plus petit indice où se trouve val s'il est dans tab, -1 sinon} paramètre s (D) tab: tableau [1, MAX] d'entiers (D) nbr, val: entier variablesid, if, im: entier début id  0 ; if  nbre+ 1 tant que (if - id) > 1 faire im  (id + if)/2 si (tab[im]  val) alors if  im sinon id  im fsi ftq si (if = nbre + 1) alors retourne (-1) sinon si (tab[if]=val) alors retourne(if) sinon retourne(-1) fsi fsi fin
  • 20. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 20 Recherche dans un ABR fonction rech (unAbr, val) retourne(booléen) {renvoieVRAl si val se trouve dans l'ABR unAbr, FAUXsinon} paramètre s (D) unAbr: ABR (D) val: entier variables trouvé: booléen ; id, if, im: entiers début si unAbr.Vide() alors retourner (FAUX) sinon si (unAbr.Info() = val) alors retourner(VRAI) sinon si (unAbr.Info() < val) alors retourner (Rech(unAbr.FD(), val)) sinon retourner (Rech(unAbr.FG(), val)) fsi fsi fsi fin
  • 21. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 21 32 18 9 5 2 24 27 20 36 19 13 8 12 15 17 7 Simulation de recherche
  • 22. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 22
  • 23. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 23 Adressage Dispersé
  • 24. 24 Adressage dispersé • Objectif: classer M éléments dans un tableau • Principe: dans un tableau de p cases, on classe l'élément x, à l’indice k, donné par une fonction d'adressage h - classer un élément x  entier k, compris entre 1 et p • Fonction h: h(x)=k - la valeur k ne dépend que de l'élément x ; - l'élément x n'est pas placé relativement aux autres éléments
  • 25. 25 Quelques exemples de fonctions d’adressage • x : chaîne h1(x) = nombre de caractères de la chaîne h1("Paul") = 4 h1("MmeDupont")=9 • x : entier h2(x) = somme de ses chiffres décimaux h2(342) = 9 h2(100 340) = 8 • x : entier h3(x)= nombre de bits à 1 dans l'écriture binaire h3(342) = h3(101010010) = 4 • x : chaîne de caractères h4(x) = somme des codes ASCII des caractères de la chaîne
  • 26. 26 Exemple de classement par la fonction d’adressage h1 • Suite de prénoms : - Marc, Izabelle, Paule, Jeanne, Ali, Jo, Michèle - Codes associés par h1 (nb caractères) : 4, 8, 5, 6, 3, 2, 7 • Constatations : - la valeur k ne dépend que de l'élément x ; - la place de l'élément x n'est pas déterminée relativement aux autres éléments classés... - ...à la différence d'un tri avec relation d'ordre où la place d'un élément est déterminée par le nombre d'éléments "meilleurs" selon cet ordre. Jo Ali Marc Paule Jeanne Michèle Izabelle 1 2 3 4 5 6 7 8
  • 27. 27 Une autre fonction d’adressage • h5 associe à c1…ck la somme : - (Somme (rang de ci dans l’alphabet * i) modulo 9) +1 • Suite de prénoms : Marc, Izabelle, Paule, Jeanne, Jo, Michèle - h5 (Marc) = ((13*1+1*2+18*3+3*4) mod 9) + 1 = 81 mod 9 + 1 = 1 - h5 (Jeanne) = ((10*1+5*2+1*3+14*4+14*5+5*6) mod 9) + 1 = 179 mod 9 + 1 = 9 – h5 (Paule) = ((16*1+1*2+21*3+12*4+5*5) mod 9) + 1 = 1 mod 9 + 1 = 2 Marc Paule Jo Izabelle Michèle Jeanne 1 2 3 4 5 6 7 8 9
  • 28. 28 Recherche d’un élément Algorithme de recherche d'un élément x dans une table construite par adressage dispersé d'une suite d'éléments : 1) on calcule le code associé à cet élément x par la fonction d’adressage, soit p. 2) on compare le contenu de la p-ième case de la table avec l’élément x : si identité, la recherche est positive, sinon elle est négative.
  • 29. 29 Ajout d’un élément Algorithme d'ajout d'un élément X dans une table construite par adressage dispersé d'une suite d'éléments: 1) on calcule le code associé à cet élément par la fonction d'adressage, soit p. 2) on affecte l'élément à la p-ième place dans la table, à condition toutefois que cette place ne soit pas déjà occupée  risque de collision
  • 30. 30 Exemples (avec h5 ) • Recherche de "Isabelle" - code associé par h5 : 1 et tabAdrDisp [1]  "Isabelle "  recherche négative • Ajout de "Ali" - code associé par h5 : 8 ; tabAdrDisp [8] : " "  ajout possible • Ajout de "Lola" - code associé par h5 : 2 ; or tabAdrDisp [2] : "Paule"  collision Marc Paule Jo Izabelle Michèle Ali Jeanne 1 2 3 4 5 6 7 8 9
  • 31. 31 Méthodes de résolution des collisions : méthodes internes • lnternes car on opère dans le tableau alloué - première possibilité : on utilise la place libre dans le tableau • Algorithme d'ajout d'un élément entré en collision : - à partir du rang de la collision, rechercher la première place libre et y placer l'élément entré en collision. - arrivé à la dernière case du tableau, continuer la recherche à la première case du tableau. • Exemples: "Lola" (avec h5 : 2) et "Isabelle" (avec h5 : 1) Marc Paule Lola Isabelle Jo Izabelle Michèle Ali Jeanne 1 2 3 4 5 6 7 8 9
  • 32. 32 Retrait d’un élément 1) on calcule le code associé à cet élément x par la fonction d'adressage : soit p ; 2) on compare le contenu de la p-ième case de la table avec l'élément x : • si identité, on le supprime puis on place dans cette case une marque pour indiquer que l'élément supprimé a pu provoquer d'éventuelles collisions • si non identité, on poursuit la recherche séquentiellement en cas d'éventuelles collisions • arrêt si case vide ou parcours jusqu’à (p-1)
  • 33. 33 Recherche d’un élément 1) on calcule le code associé à cet élément x par la fonction d'adressage : soit p. 2) on compare le contenu de la p-ième case de la table avec l'élément x : • si identité, la recherche est positive, • sinon on poursuit la recherche séquentiellement, en cas d’éventuelles collisions (utiliser les marques) • arrêt avec recherche négative si case vide ou parcours jusqu’à (p-1)
  • 34. 34 Exemples (avec h5 ) retrait de «Marc» (code 1) Marc Paule Lola Isabelle Jo Izabelle Michèle Ali Jeanne 1 2 3 4 5 6 7 8 9 X Paule Lola Isabelle Jo Izabelle Michèle Ali Jeanne 1 2 3 4 5 6 7 8 9 retrait de «Ali» (code 8) recherche de «Isabelle» (code 1) X Paule Lola Isabelle Jo Izabelle Michèle Ali Jeanne 1 2 3 4 5 6 7 8 9 X Paule Lola Isabelle Jo Izabelle Michèle X Jeanne 1 2 3 4 5 6 7 8 9
  • 35. 35 Résolution interne des collisions (suite) • Deuxième solution: on partitionne le tableau en deux : - une zone d'adressage primaire - une zone de débordement • Algorithme d'ajout d'un élément entré en collision : rechercher une place libre dans la zone de débordement et y placer l'élément entré en collision
  • 36. 36 Exemple • Ajout de «Lola» (code associé par h5 : 2) • puis de «Isabelle» (code associé par h5 : 1) Marc Paule Jo Izabelle Michèle Ali Jeanne 1 2 3 4 5 6 7 8 9 Lola Isabelle 10 11 12 13 14 15 Zone de débordement (à la « suite » du tableau)
  • 37. 37 Recherche … 1) on calcule le code associé à cet élément x par la fonction d'adressage, soit p 2) on compare le contenu de la p-ième case de la table avec l'élément x : si identité, la recherche est positive, sinon on mène une recherche séquentielle dans la zone de débordement du tableau
  • 38. 38 … et retrait 1) on calcule le code associé à cet élément x par la fonction d'adressage, soit p 2) on compare le contenu de la p-ième case de la table avec l'élément x : • si identité, on le supprime puis on place dans cette case une marque pour indiquer que l'élément supprimé a pu provoquer d'éventuelles collisions • si non identité, poursuivre la recherche séquentiellement en cas d'éventuelles collisions, dans la zone de débordement du tableau
  • 39. 39 Exemples Recherche de «Ali» (h5 : 8), puis «Lola» (h5 : 2) Retrait de «Marc» (h5 : 1) Recherche «Isabelle» (h5 : 1) Marc Paule Jo Izabelle Michèle Ali Jeanne 1 2 3 4 5 6 7 8 9 Lola Isabelle 10 11 12 13 14 15
  • 40. 40 Méthodes de résolution externe des collisions • "Externes " car on alloue des zones de stockage supplémentaires • Le tableau contient, pour un code donné, deux informations : - une place de rangement d'un élément (principal) ; - une liste de débordement pour les éléments entrés en collision avec l'élément précédent
  • 41. 41 Ajout d’un élément • Algorithme d'ajout d'un élément entré en collision : - Créer la liste de débordement associée à ce code si celle-ci n'existe pas encore, - puis ajouter à cette liste le nouvel élément • Exemple (avec h5): ajout de « Lola » (code 2) Lola Marc Paule Jo Izabelle Michèle Ali Jeanne 1 2 3 4 5 6 7 8 9
  • 42. 42 Exemples (suite) Lola ajout de « Isabelle » (1) Isabelle Marc Paule Jo Izabelle Michèle Ali Jeanne 1 2 3 4 5 6 7 8 9 ajout de « José » (1) Marc Paule Jo Izabelle Michèle Ali Jeanne 1 2 3 4 5 6 7 8 9 Isabelle José Lola
  • 43. 43 Recherche d’un élément 1) on calcule le code associé à cet élément x par la fonction d'adressage, soit p 2) on compare le contenu de la première information de la p-ième case de la table avec l'élément x • si identité, la recherche est positive ; • sinon, on mène une recherche séquentielle dans la liste associée • recherche de « Michèle » (7), • puis « Isabelle » (1) Marc Paule Jo Izabelle Michèle Ali Jeanne 1 2 3 4 5 6 7 8 9 José Lola Isabelle
  • 44. 44 Retrait d’un élément 1) on calcule le code associé à cet élément x par la fonction d'adressage, soit p 2) on compare le contenu de la première information de la p-ième case de la table avec l'élément x • si identité, on retire l’élément et on le remplace par l'élé- ment placé en tête de la liste associée, quand elle existe ; • sinon on mène une recherche séquentiellement dans la liste associée, avec retrait si la recherche est positive • retrait de « Michèle » (7), • puis « Lola » (2) et enfin « Marc » (1) Marc Paule Jo Izabelle Michèle Ali Jeanne 1 2 3 4 5 6 7 8 9 Isabelle José Lola
  • 45. 45 Algorithmes de la méthode d'adressage dispersé avec résolution externe type Info2 = agrégat principal : chaîne {première chaîne associée à un code donné} débord : Liste {objet Liste dont l'information est une chaîne} fin fonction code (uneChaîne) retourne (entier) {retourne la valeur donnée par la fonction d’adressage} paramètre (D) uneChaîne : chaîne
  • 46. 46 Procédure ajout (table, laChaîne) {ajoute l'élément laChaîne dans une table, par adressage dispersé, avec résolution externe des collisions} paramètres (D/R) table: tableau [1, TAILLEMAX] de Info2 (D) laChaîne : chaîne variables ok: booléen ind: entier début ind  code(laChaîne) si table[ind].principal = " " alors {c'est la première occurrence de ce code d'adressage} table[ind].principal  laChaîne sinon {il y a collision: la place principale est déjà occupée, d’où ajout dans la liste de débordement,en tête} table[ind].débord.premier() table[ind].débord.insèreAvant(laChaîne) fsi fin
  • 47. 47 Fonction recherche (table, laChaîne) retourne (booléen) {recherche si l'élément laChaîne est présent dans une table, par adressage dispersé, avec résolution externe des collisions} paramètres (D) table: tableau [1, TAILLEMAX] de Info2 (D) laChaîne : chaîne variables trouvé, ok: booléens; ind : entier début ind  code(laChaîne) trouvé  table[ind].principal = laChaîne si non trouvé {recherche de laChaîne dans la liste de débordement} alors table[ind].débord.premier() tant que non trouvé et non table[ind].débord.horsListe() faire trouvé  (table[ind].débord.info() = laChaîne) table[ind].débord.suivant() ftq fsi retourne (trouvé) fin
  • 48. 48 Fonction retrait (table, laChaîne) retourne booléen {retire, si possible, l’élément laChaîne d’une table construite par adressage dispersé avec résolution externe des collisions} paramètres (D/R) table: tableau [1, TAILLEMAX] de Info2 (D) laChaîne : chaîne variables ok : booléen; ind : entier début ind  code(laChaîne) trouvé  (table[ind].principal = laChaîne) si trouvé {alors retrait de laChaîne du champ principal de la table} alors retraitPrincipal (table, laChaîne, ind) sinon {recherche, et éventuel retrait, de laChaîne dans la liste de débordement} ok  rechercheRetraitDeborde (table, laChaîne, ind) fsi retourne (ok) fin
  • 49. 49 Procédure retraitPrincipal (table, laChaîne, ind) {retire l’élément laChaîne du champ Principal du code adresse ind; ce champ reçoit la valeur de tête de la liste de débordement si possible} paramètres (D/R) table: tableau [1, TAILLEMAX] de Info2 (D) laChaîne : chaîne; ind : entier variables elt : Info2; ind : entier début si (table[ind].débord.vide()) {il n’y a pas eu de collision sur ce code} alors {ce code n’adresse plus aucune chaîne} table[ind].principal  " " sinon {on récupère l’élément en tête de liste de débordement} table[ind].débord.premier() ; elt  table[ind].débord.info() {pour mettre sa valeur dans le champ principal} table[ind].principal  elt {et puis on retire la cellule de tête de la liste de débordement} table[ind].débord.supprimer() fsi fin
  • 50. 50 Fonction rechercheRetraitDéborde(table, laChaîne,ind) {recherce et retire, si possible, l’élément laChaîne de la liste de débordement du code adresse ind} paramètres (D/R) table: tableau [1, TAILLEMAX] de Info2 (D) laChaîne : chaîne; ind : entier variable trouvé : booléen début table[ind].débord.premier() trouvé  faux {recherche de laChaîne dans la !iste de débordement} tant que non trouvé et non table[ind].débord.horsListe() faire trouvé  (table[ind].débord.info() = laChaîne ) si non trouvé alors table[ind].débord.suivant() ftq {si trouvé, alors retrait dans la liste de débordement de la table} si trouvé alors table[ind].débord.supprimer() {le curseur est placé sur laChaîne} retourne (trouvé) fin
  • 51. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 51 Complexité des algorithmes
  • 52. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 52 Complexité des algorithmes • Complexité temporelle, complexité spatiale coût en temps: temps nécessaire à l'exécution coût en espace: espace mémoire nécessaire • Pire des cas, complexité moyenne - la complexité dans le pire des cas n'est pas nécessairement une bonne indication du coût en pratique (exemple de la méthode du simplexe) - comment estimer le cas moyen ? • Étude a priori, bancs d'essai et évaluation a posteriori - étude théorique - étude pratique de l'algorithme implémenté, bancs d'essai
  • 53. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 53 Complexité d'un problème, complexité d’un algorithme • contraintes sur un problème par exemple, recherche d'un élément dans un tableau de n éléments non triés : si l'élément n'est pas présent, n comparaisons seront nécessaires pour le constater • Attention: si le tableau est trié, une seule peut être suffisante ! - parmi les différents algorithmes possibles, certains sont meilleurs que d'autres - la comparaison des pires des cas peut ne pas être une bonne indication
  • 54. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 54 Complexité asymptotique • Nécessité d'étudier la complexité pour de grosses quantités de données • Exemple : deux algorithmes pour une même tâche: - A1 effectue n2 opérations de base, A2 effectue n.log2 n opérations • Deux machines : - M1 effectue 210 (environ mille) opérations par sçconde - M2 effectue 220 (environ un million d') opérations par seconde • Temps de calcul (en secondes) :
  • 55. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 55 M1 M2 A1 A2 A1 A2 n = 210 210 10 1 < 0,01 n = 220 230 20. 210 220 20 Complexité asymptotique (2)
  • 56. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 56 Rapidité de croissance comparée de certaines fonctions usuelles
  • 57. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 57 Calcul de la complexité d’un algorithme • Calcul de la valeur d'un polynôme en un point 1. p  a[0] 2. pour i 1 à n faire {puissance(a, n) retourne an} 3. xpi  puissance (x , i) 4. p  p + a[i]* xpi fpour • Nombre de multiplications en 3 --> 1+2+3+...+ (n-1) = (n-l)n/2 en4 --> n • Nombre d'additions en 4 --> n • soit au total: n(n + 3)/2 < n2 pour n > 3.
  • 58. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 58 Notations utilisées • Grand O f(n) = 0(g(n)) s'il existe C> 0 et no > 0 tels que f(n)  C. g(n) pour tout n  no • Grand oméga f(n) = Ω(g(n)) s'il existe C> 0 et no > 0 tels que f(n)  C. g(n) pour tout n  no • Grand thêta f(n) = Θ(g(n)) s'il existe C1 et C2 > 0 et no > 0 tels que C1.g(n)  f(n)  C2. g(n) pour tout n  no
  • 59. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 59 Exemples • f(n) = O(1) f est majorée • f(n) = Ω (1) f est minorée 3n+2 = O(n) 3n+3 = O(n) 100n+6 = O(n) 10n2+4n+2=O(n2) 3n+3 = O(n2) 1000n2 + 100 n -6 = O(n2) 10n2+4n+2= O(n4) 6*2n + n2 = O(2n) • ----> c'est la plus petite fonction g(n) qui est intéressante
  • 60. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 60 Exemples (suite) 3n+3 = Ω (n) 100n+6 = Ω (n) 10n2+4n+2= Ω (n2) 6*2n + n2 = Ω (n2) 6*2n + n2 = Ω (n) 6*2n + n2 = Ω (1) • ----> c'est la plus grande fonction g(n) qui est intéressante
  • 61. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 61 Temps d’exécution des algorithmes • Temps constant (rares algorithmes, cf. adressage dispersé) O(1) • Temps logarithmique (exemple: recherche dichotomique) O(log2n) • Temps linéaire (exemple: recherche séquentielle) O(n) • Temps polynomial O(nk) (coûteux si k dépasse 3) - quadratique O(n2) - cubique O(n3) • Temps exponentiel O(cn) (à éviter en général)
  • 62. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 62 Comparaison des complexités d'algorithmes de la même classe • Calcul de la valeur d'un polynôme en un point (1) p  a[0] pour i  1 à n faire xpi  puissance(x, i) p  p + a[i]* xpi fpour n(n+1)/2 multiplications, n additions : algorithme en O(n2)
  • 63. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 63 Calcul de la valeur d'un polynôme en un point (2) p  a[0] xpi  1 pour i  1 à n faire xpi  xpi * x p  p + a[i]* xpi fpour 2n multiplications, n additions : algorithme en O(n)
  • 64. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 64 • Calcul de la valeur d'un polynôme en un point (3) p  a[n] pour i  n - 1 à 0, pas -1 faire p  p*x + a[i] fpour n multiplications, n additions algorithme en O(n) Complexité optimale pour cette classe d'algorithmes : en O(n)
  • 65. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 65 Calcul de la complexité d’algorithmes de recherche simples • Opérations élémentaires retenues: les comparaisons 1. Recherche séquentielle dans un tableau non trié - complexité au pire n comparaisons - complexité moyenne n/2 comparaisons algorithme en O(n) 2. Recherche séquentielle dans un tableau trié - complexité au pire n comparalsons - complexité moyenne n/2 comparaisons algorithme en O(n)
  • 66. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 66 • Recherche dichotomique (dans un tableau trié 1) - complexité au pire = complexité moyenne = nombre p d'intervalles considérés • Exemple avec n = 8 = 23 tableau de 8 éléments niveau 0 niveau 1 niveau 2 niveau 3 Profondeur de l’arbre de décision de l’ordre de log2n : complexité algorithmique en O(log2n)
  • 67. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 67 Tris
  • 68. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 68 Tris • Données dans un ensemble d'éléments S muni d'un ordre total ordre | a < a (réflexif) partiel | a < b et b < c => a < c (transitif) | a ~ b et b < a => a = b (antisymétrique) total | a,b a=b OU a<b OU b<a (total) • Problème du tri éléments al, ..., an ~ S donnés trouver une permutation p: { 1, . . ., n} { 1, . . .,n} telle que ap(1)  …  ap(n) En général, on s'intéresse plutôt au résultat de l'application de p
  • 69. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 69 • Tris internes et tris externes - internes: l'ensemble des données peut être traité en mémoire centrale - externes: on opère sur une partie des données seulement • Tris d'entiers: méthode des seaux à trier: des entiers entre 1 et m principe: - on crée m files d'attente vides numérotées 0, …, m-1 - on parcourt linéairement les données, et on place ai dans la file numérotée ai - on place les files d'attente bout à bout
  • 70. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 70 • Exemple m = 10, 4 7 3 2 8 1 5 • Résultat: 1, 2, 3, 4, 5, • Estimation du coût : - chaque élément peut être placé dans une file en temps constant, d'où O(n) pour les n éléments ; - concaténation de m files en O(m) ; - si m = 0(n), coût total en O(n). 1 2 3 4 5 7 8 0 1 2 3 4 5 6 7 8 9
  • 71. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 71 • Cette méthode peut être généralisée à des k-uplets d'entiers munis de l'ordre lexicographique, et plus généralement à des chaînes (de longueur variable): (s1,..., sp) < (t1,..., tq) si et seulement si • ou bien p < q et si = ti pour 1  i  p (s est un préfixe de t); • ou bien il existe j tel que si < tj et si = ti pour tout i < j. • Exemples: 634 < 63472 tri < triage 64589 < 647 seau < selle • Pour des suites de k-uplets dont chaque composante est un entier entre 0 et m-l, on obtient un algorithme de coût O((m+n)k).
  • 72. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 72 Cas général: - on trie des éléments quelconques munis d'un ordre (total) - la seule opération disponible est la comparaison de deux éléments Exemple: tri de trois éléments a, b, c a<b b<c a<c a<c b<c a, b, c a, c, b b, a, c c, a, b b, c, a c, b, a
  • 73. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 73 Estimation du coût • Arbre binaire de hauteur h => au plus 2h feuilles •Théorème Un arbre de décision pour n éléments a une hauteur supérieure ou égale à log(n!). - En effet, un arbre de décision doit avoir au moins autant de feuilles que de résultats possibles, c'est-à-dire n! feuilles au moins. Donc la hauteur de cet arbre est  log(n!) • Estimation Formule de Stirling: n! approximé par (n/e)n, donc le nombre de tests nécessaires est minoré par n(logn - log e) = nlog n -1,44n • => on ne peut pas espérer faire mieux que O(n log n)
  • 74. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 74 Méthodes de tri élémentaires (1) Tri par sélection • Données: un tableau de n éléments à trier • Principe: pour chaque position successive dans le tableau, on cherche l'élément qui occupera cette position dans le tableau trié, et on l'y place en permutant cet élément avec l'élément courant. liste triée liste triée case courante devrait se trouver dans la case courante reste à trier reste à trier
  • 75. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 75 20 18 9 5 24 13 27 2 8 32 7 12 36 15 17 19
  • 76. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 76 Algorithme de tri par sélection procédure triSélection (tab, nbre) {recherche pour chaque case l'élément qui doit y être affecté et y place cet élément} paramètre s (D/R) tab: tableau [1, MAX] d'entiers (D) nbre: entier variables indDuMin, position: entier début pour position  1 à nbre -1 faire indDuMin  sélection(tab, nbre, position,nbre) {recherche l’indice de l’élément minimum entre position et la fin de tab} échanger(tab, position, indDuMin) {échange deux positions dans tab} fpour fin
  • 77. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 77 Algorithme de tri par sélection (2) fonction sélection (tab, nbre, indDébut,indFin) retourne(entier) {recherche l'indice de l'élément minimum de tab entre indDébut et indFin} paramètre s (D) tab: tableau [1, MAX1 d'entiers (D) nbre, indDébut, indFin : entiers variables indDuMin, ind: entiers début indDuMin  indDébut pour ind  (indDébut + 1) à indFin faire si tab[indDuMin] > tab[ind] alors indDuMin  ind fpour retourner(indDuMin) fin
  • 78. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 78 Méthodes de tri élémentaires (1) Tri par insertion • Données: un tableau de n éléments à trier • Principe: la partie gauche est triée; on essaie d'insérer chaque nouvel élément dans cette liste, en décalant d'un cran la partie droite restante. liste triée liste triée place du nouveau reste à trier nouveau reste reste
  • 79. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 79 20 18 9 5 24 13 27 2 8 32 7 12 36 15 17 19
  • 80. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 80 Algorithme de tri par insertion procédure triInsertion (tab, nbre) {recherche pour chaque élément la case où il doit être affecté et y place cet élément} paramètre s (D/R) tab: tableau [1, MAX] d'entiers (D) nbre: entier variables indVal, numPlace: entiers début pour indVal  2 à nbre faire {recherche de 1'endroit où doit s'insérer la valeur placée en indVal} numPlace  Insertion(tab, nbre, indVal) {si la valeur n'est pas à insérer en fin de zône triée, l'insérer à la place voulue} si (numPlace  indVal ) alors {libère la position numPlace par décalage et y place tab[indVal]} décalerEtPlacer(tab, numPlace, indVal) fsi fpour fin
  • 81. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 81 procédure décalerEtPlacer(tab, nPlace, indVal) {libère la position nPlace par décalage et y place tab[indVall} paramètre s (D/R) tab: tableau [1, MAX] d'entiers (D) nPlace, indVal: entiers variables indDuMin, ind, deCôté: entiers début deCôté  tab[indVal] {faire un trou au rang nPlace en décalant les valeurs qui suivent d'un rang vers la droite} pour ind  indVal à nPlace + 1 pas -1 faire tab[ind]  tab[ind-1] fpour tab[nPlace]  deCôté fin
  • 82. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 82 Simulation du décalage
  • 83. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 83 Deux algorithmes pour la recherche de place 1. Recherche séquentielle dans un tableau trié fonction insertion (tab, nbre, indV) retourne(entier) {renvoie la place à laquelle il faut affecter tab[indV] pour respecter l'ordre} paramètre s (D) tab: tableau [1, MAX] d'entiers (D) nbr, indV: entiers variables dépassé: booléen; i, val, nbValTriées: entiers début val  tab[indV]; nbValTriées  indV - 1 dépassé  faux; i  0 tant que i < nbValTriées ET non dépassé faire ii+ 1 dépassé  (tab[i] > val) ftq si dépassé alors retourne (i) sinon retourne (i+l) fsi fin
  • 84. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 84 Simulation du tri par insertion séquentielle
  • 85. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 85 2. Recherche dichotomique fonction insertion (tab, nbre, indV) retourne (entier) {renvoie la place à laquelle ilfaut affecter tab[indV] pour respecter l'ordre} paramètre s (D) tab: tableau [1, MAX] d'entiers (D) nbr, indV: entiers variables id, if, im, val: entiers début val  tab[indV]; id  0 if  indV + 1 tant que if - id > 1 faire im  (id + if)/2 si (tab[im] > val) alors if im sinon id im fsi ftq retourne (id + 1) fin
  • 86. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 86 Simulation du tri par insertion dichotomique
  • 87. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 87 Complexité des tris élémentaires • Coût du tri par sélection - on fait (n-l) + (n-2) + ... + 1 tests de comparaison, soit en tout: n(n-l)/2 comparaisons - on peut être amené à faire n-1 échanges => algorithme en O(n2) • Coût du tri par insertion: - en moyenne n2/4 comparaisons - n2/8 échanges deux fois plus dans le pire des cas => ici encore algorithme en O(n2)
  • 88. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 88 Tris indirects • Problème : tri sur différents critères • On veut mémoriser les résultats des tris par nom, par taille, par date Rep[1] Rep[2] Rep[3] nom toto.C toto.o toto taille 20 457 3 456 5 248 date 12.04.01 13.04.01 15.04.1
  • 89. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 89 Solution : utilisation de tableaux d’indices • On utilise trois tableaux différents qui contiennent non les agrégats, mais les indices des agrégats dans le tableau 3 1 2 triNom triTaille triDate 2 3 1 1 2 3
  • 90. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 90 Tris indirects (suite) • Dans l’algorithme de tri, la comparaison de deux agrégats se fait relativement à un critère (nom, taille, date) : précède(i, j, Critère, tab) fonction qui retourne vrai si le fichier tab[i] précède le fichier tab[j] relativement au critère Critère
  • 91. 2003-2004 Algorithmique 6 : Recherche, complexité, tris 91 Fin du volume 6