Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly...

91
2003-2004 Algorithmique 6 : Recherche, complex ité, tris Algorithmique : Volume 6 • Recherche Adressage dispersé • Tris • Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat iUT ORSAY Université Paris XI I.U.T. d'Orsay Département Informatique Année scolaire 2003-2004

Transcript of Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly...

Page 1: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 Algorithmique 6 : Recherche, complexité, tris

Algorithmique : Volume 6

• Recherche• Adressage dispersé• Tris• Complexité

Cécile Balkanski, Nelly Bensimon, Gérard Ligozat

iUT ORSAYUniversité Paris XII.U.T. d'OrsayDépartement InformatiqueAnnée scolaire 2003-2004

Page 2: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 Algorithmique 6 : Recherche, complexité, tris

2

Recherche

Page 3: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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) { xE | x=a } 

• plus généralement existe‑t‑il x vérifiant certains critères  (x) { xE | (x)}  trouver tous les x satisfaisant certains critères 

{ xE | (x)} (bases de données) 

 

Page 4: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

Page 5: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 Algorithmique 6 : Recherche, complexité, tris 5

32

18

9

5

2

24

27

20

36

19

13

812

15

177

arbre binaire de recherche

Page 6: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

Page 7: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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.

Page 8: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

Page 9: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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: entiervariables trouvé: booléen i: entierdé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) fsifin

Page 10: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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 irir+ 1 tab_r[ir] tab_d[id] fsi fpour fin

Page 11: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

Page 12: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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: entiervariables 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

Page 13: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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 : entierdébuttrouvé faux; dépassé faux; i 0tant que non (trouvé OU dépassé) ET i < nbr faire

i i+ 1trouvé (tab[i] = val)dépassé (tab[i] > val)

ftqsi trouvé alors retourne (i) sinon retourne(‑1)fin

Page 14: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

Page 15: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

Page 16: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

Page 17: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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 fsifin

Page 18: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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 fsifin

Page 19: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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: entiervariables id, if, im: entierdé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 fsifin

Page 20: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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 fsifin

Page 21: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 Algorithmique 6 : Recherche, complexité, tris 21

32

18

9

5

2

24

27

20

36

19

13

812

15

177

Simulation de recherche

Page 22: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 Algorithmique 6 : Recherche, complexité, tris 22

Page 23: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 Algorithmique 6 : Recherche, complexité, tris

23

Adressage Dispersé

Page 24: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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  

Page 25: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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

Page 26: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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 Izabelle1 2 3 4 5 6 7 8

Page 27: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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

Page 28: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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.

Page 29: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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

Page 30: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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

Page 31: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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

Page 32: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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)

Page 33: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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)

Page 34: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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

Page 35: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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

Page 36: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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)

Page 37: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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

Page 38: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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

Page 39: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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

Page 40: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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

Page 41: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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

Page 42: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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

Page 43: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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 Jeanne1 2 3 4 5 6 7 8 9

José Lola

Isabelle

Page 44: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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 Jeanne1 2 3 4 5 6 7 8 9

Isabelle

José Lola

Page 45: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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

Page 46: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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: entierdé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)

fsifin

Page 47: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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înevariables 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

Page 48: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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înevariables ok : booléen; ind : entierdé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

Page 49: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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 : entiervariables elt : Info2; ind : entierdé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()

fsifin

Page 50: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 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 : entiervariable 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

Page 51: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 Algorithmique 6 : Recherche, complexité, tris

51

Complexité des algorithmes

Page 52: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

Page 53: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

Page 54: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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) :  

Page 55: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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)

Page 56: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 Algorithmique 6 : Recherche, complexité, tris 56

Rapidité de croissance comparée

de certaines fonctions usuelles

Page 57: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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.

Page 58: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

Page 59: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

Page 60: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

Page 61: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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)

Page 62: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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) 

Page 63: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

fpour2n multiplications, n additions :  algorithme en O(n)

Page 64: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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)

Page 65: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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)

Page 66: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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)

Page 67: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 Algorithmique 6 : Recherche, complexité, tris

67

Tris

Page 68: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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 : { 1, . . ., n} { 1, . . .,n} telle que a … a(n)

En général, on s'intéresse plutôt au résultat de l'application de

Page 69: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

Page 70: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

Page 71: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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).

Page 72: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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<ca, b, c

a, c, b

b, a, c

c, a, b b, c, a c, b, a

Page 73: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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!)

 

• EstimationFormule 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)

Page 74: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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 courantedevrait se trouver dans la case courante

reste à trier

reste à trier

Page 75: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 Algorithmique 6 : Recherche, complexité, tris 75

20 18 9 5 24 13 27 2 8 32 7 12 36 15 17 19

Page 76: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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: entiervariables indDuMin, position: entierdébutpour 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}

fpourfin 

Page 77: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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: entiersdébutindDuMin indDébutpour ind (indDébut + 1) à indFin faire

si tab[indDuMin] > tab[ind] alors indDuMin indfpourretourner(indDuMin)fin

Page 78: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

Page 79: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 Algorithmique 6 : Recherche, complexité, tris 79

20 18 9 5 24 13 27 2 8 32 7 12 36 15 17 19

Page 80: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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: entiervariables indVal, numPlace: entiersdébutpour 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) fsifpourfin

 

Page 81: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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: entiersvariables indDuMin, ind, deCôté: entiersdé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

Page 82: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 Algorithmique 6 : Recherche, complexité, tris 82

Simulation du décalage

Page 83: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 Algorithmique 6 : Recherche, complexité, tris 83

Deux algorithmes pour la recherche de place1. 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: entiersdébutval tab[indV]; nbValTriées indV ‑ 1dépassé faux; i 0tant que i < nbValTriées ET non dépassé faire

ii+ 1 dépassé (tab[i] > val) ftq si dépassé alors retourne (i) sinon retourne (i+l) fsifin

Page 84: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 Algorithmique 6 : Recherche, complexité, tris 84

Simulation du tri par insertion séquentielle

Page 85: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

Page 86: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 Algorithmique 6 : Recherche, complexité, tris 86

Simulation du tri par insertion dichotomique

Page 87: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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)

Page 88: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

Page 89: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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 2triNom

triTaille

triDate

2 3 1

1 2 3

Page 90: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

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

Page 91: Algorithmique : Volume 6 Recherche Adressage dispersé Tris Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat Université Paris XI I.U.T. d'Orsay.

2003-2004 Algorithmique 6 : Recherche, complexité, tris

91

Fin du volume 6