Vous êtes sur la page 1sur 91

iUT

ORSAY

Universit Paris XI I.U.T. d'Orsay Dpartement Informatique Anne scolaire 2003-2004

Algorithmique : Volume 6
Recherche Adressage dispers Tris Complexit

Ccile Balkanski, Nelly Bensimon, Grard Ligozat

Recherche

2003-2004

Algorithmique 6 : Recherche, complexit, tris

Recherche
Problme gnral abstrait ensemble de valeurs E, lment a; rponse: boolen est-ce que a E? (x) { xE | x=a }

plus gnralement existe-t-il x vrifiant certains critres (x) { xE | (x)} trouver tous les x satisfaisant certains critres { xE | (x)} (bases de donnes)

2003-2004

Algorithmique 6 : Recherche, complexit, tris

Recherche en informatique
On ne travaille pas sur des ensembles mathmatiques, mais sur des structures de donnes particulires Les donnes peuvent tre de nature complexe (agrgats, classes) Exemples : tableau
20 18 9 5 24 13 27 2 8 32 7 12 36 15 17 19

tableau tri
2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36
Algorithmique 6 : Recherche, complexit, tris 4 2003-2004

arbre binaire de recherche


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

2003-2004

Algorithmique 6 : Recherche, complexit, tris

Tri de donnes complexes


Exemple de donne complexe: type Etudiant = agrgat nom: chane ge: entier classement: entier photo: fichier_GIF fin on peut trier par nom (ordre alphabtique), par ge, par classement pas par photo cls, cls primaires ex-aequo, mme ge
2003-2004 Algorithmique 6 : Recherche, complexit, tris 6

Recherche et type de donnes


On utilise divers types de donnes sur lesquelles on fait des oprations de base:
ajout suppression mise- jour consultation

Chaque structure a des avantages et des inconvnients : tableau, tableau tri, arbre binaire, liste chane, etc.
2003-2004 Algorithmique 6 : Recherche, complexit, tris 7

Recherche squentielle
fonction rechSeq (tab , nbre , val) retourne (boolen)
{renvoie VRAI si val est dans tab, FAUX sinon}

paramtre s (D) tab: tableau[1, MAX] d'entiers (D) nbr, val: entier variables trouv: boolen i: entier dbut 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

fonction rechSeq (tab, nbre, val) retourne(entier) {renvoie le premier indice o se trouve val dans tab, -1 sinon} paramtre s (D) tab: tableau [1, MAX] d'entiers (D) nbr, val: entier variables trouv: boolen i: entier dbut trouv faux i0 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 9

Recherche avec critres


procdure rechLesMin (tab_d, nbre_d, tab_r, nbre_r, val)
{renvoie dans le tableau tab_r les lments de tab_d val}

paramtre 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 dbut 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
2003-2004 Algorithmique 6 : Recherche, complexit, tris 10

fonction rechMin (tab, nbre) retourne(entier)


{renvoie la plus petite valeur contenue dans le tableau tab}

paramtre s (D) tab : tableau [1, MAX] d'entiers, nbr : entier variables i, min : entiers dbut 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 11

fonction rechPosMin (tab, nbre) retourne(entier)


{retourne le (dernier) indice de la plus petite valeur du tableau tab}

paramtre s (D) tab: tableau [1, MAX] d'entiers, nbr: entier variables i, imin, min: entiers dbut 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 12

Recherche squentielle 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}

paramtre s (D) tab: tableau [1, MAX] d'entiers (D) nbr, val: entier variables trouv, dpass : boolens ; i : entier dbut trouv faux; dpass faux; i 0 tant que non (trouv OU dpass) ET i < nbr faire i i+ 1 trouv (tab[i] = val) dpass (tab[i] > val) ftq si trouv alors retourne (i) sinon retourne(-1) fin
2003-2004 Algorithmique 6 : Recherche, complexit, tris 13

Recherche dichotomique
Rappel: les valeurs doivent tre tries !
2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36

Principe: on vise au milieu du tableau si l'lment vis est plus grand que val, il suffit de chercher gauche ; s'il est plus grand, il suffit de chercher droite
2003-2004 Algorithmique 6 : Recherche, complexit, tris 14

12 13 15 17 18 19 20 24 27 32 36

12 13 15 17 18 19 20 24 27 32 36

2003-2004

Algorithmique 6 : Recherche, complexit, tris

15

12 13 15 17 18 19 20 24 27 32 36

12 13 15 17 18 19 20 24 27 32 36

2003-2004

Algorithmique 6 : Recherche, complexit, tris

16

Recherche dichotomique
fonction rechDicho (tab, nbre, val) retourne(entier)
{renvoie un indice o se trouve val s'il est dans tab, -1 sinon}

(D) tab : tableau [1, MAX] d'entiers (D) nbr, val : entier variables trouv : boolen ; id, if, im: entiers dbut 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 2003-2004 Algorithmique 6 : Recherche, complexit, tris fin

paramtre s

17

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} paramtre s (D) tab: tableau [1, MAX] d'entiers (D) nbr, val: entier variables id, if, im: entiers dbut 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 18

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} paramtre s (D) tab: tableau [1, MAX] d'entiers (D) nbr, val: entier variables id, if, im: entier dbut 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 19

Recherche dans un ABR


fonction rech (unAbr, val) retourne(boolen) {renvoieVRAl si val se trouve dans l'ABR unAbr, FAUXsinon} paramtre s (D) unAbr: ABR (D) val: entier variables trouv: boolen ; id, if, im: entiers dbut 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 20

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

2003-2004

Algorithmique 6 : Recherche, complexit, tris

21

2003-2004

Algorithmique 6 : Recherche, complexit, tris

22

Adressage Dispers

2003-2004

Algorithmique 6 : Recherche, complexit, tris

23

Adressage dispers
Objectif: classer M lments dans un tableau Principe: dans un tableau de p cases, on classe l'lment x, lindice k, donn par une fonction d'adressage h
- classer un lment x entier k, compris entre 1 et p

Fonction h:

h(x)=k

- la valeur k ne dpend que de l'lment x ; - l'lment x n'est pas plac relativement aux autres lments
24

Quelques exemples de fonctions dadressage


x : chane h1(x) = nombre de caractres de la chane
h1("Paul") = 4 h2(342) = 9 h1("MmeDupont")=9 h2(100 340) = 8

x : entier h2(x) = somme de ses chiffres dcimaux x : entier h3(x)= nombre de bits 1 dans l'criture binaire
h3(342) = h3(101010010) = 4

x : chane de caractres
h4(x) = somme des codes ASCII des caractres de la chane
25

Exemple de classement par la fonction dadressage h1


Suite de prnoms :
- Marc, Izabelle, Paule, Jeanne, Ali, Jo, Michle - Codes associs par h1 (nb caractres) : 4, 8, 5, 6, 3, 2, 7

Jo
1 2

Ali
3

Marc Paule Jeanne Michle


4 5 6 7

Izabelle
8

Constatations :
- la valeur k ne dpend que de l'lment x ; - la place de l'lment x n'est pas dtermine relativement aux autres lments classs... - ... la diffrence d'un tri avec relation d'ordre o la place d'un lment est dtermine par le nombre d'lments "meilleurs" selon cet ordre.
26

Une autre fonction dadressage


h5 associe c1ck la somme :
- (Somme (rang de ci dans lalphabet * i) modulo 9) +1

Suite de prnoms : Marc, Izabelle, Paule, Jeanne, Jo, Michle


- 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
1 2 3 4

Jo
5

Izabelle Michle
6 7 8

Jeanne
9
27

Recherche dun lment


Algorithme de recherche d'un lment x dans une table construite par adressage dispers d'une suite d'lments :
1) on calcule le code associ cet lment x par la fonction dadressage, soit p. 2) on compare le contenu de la p-ime case de la table avec llment x : si identit, la recherche est positive, sinon elle est ngative.

28

Ajout dun lment


Algorithme d'ajout d'un lment X dans une table construite par adressage dispers d'une suite d'lments:
1) on calcule le code associ cet lment par la fonction d'adressage, soit p. 2) on affecte l'lment la p-ime place dans la table, condition toutefois que cette place ne soit pas dj occupe risque de collision

29

Exemples (avec h5 )
Recherche de "Isabelle"
- code associ par h5 : 1 et tabAdrDisp [1] "Isabelle " recherche ngative

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
1 2 3 4

Jo
5

Izabelle Michle
6 7

Ali
8

Jeanne
9
30

Mthodes de rsolution des collisions : mthodes internes


lnternes car on opre dans le tableau allou - premire possibilit : on utilise la place libre dans le tableau Algorithme d'ajout d'un lment entr en collision : - partir du rang de la collision, rechercher la premire place libre et y placer l'lment entr en collision. - arriv la dernire case du tableau, continuer la recherche la premire case du tableau. Exemples: "Lola" (avec h5 : 2) et "Isabelle" (avec h5 : 1)

Marc Paule Lola Isabelle Jo Izabelle Michle Ali


1 2 3 4 5 6 7 8

Jeanne
31

Retrait dun lment


1) on calcule le code associ cet lment x par la fonction d'adressage : soit p ; 2) on compare le contenu de la p-ime case de la table avec l'lment x : si identit, on le supprime puis on place dans cette case une marque pour indiquer que l'lment supprim a pu provoquer d'ventuelles collisions si non identit, on poursuit la recherche squentiellement en cas d'ventuelles collisions arrt si case vide ou parcours jusqu (p-1)
32

Recherche dun lment


1) on calcule le code associ cet lment x par la fonction d'adressage : soit p. 2) on compare le contenu de la p-ime case de la table avec l'lment x : si identit, la recherche est positive, sinon on poursuit la recherche squentiellement, en cas dventuelles collisions (utiliser les marques) arrt avec recherche ngative si case vide ou parcours jusqu (p-1)

33

Exemples (avec h5 )
Marc Paule Lola
1 2 3

Isabelle
4

Jo Izabelle Michle Ali


5 6 7 8

Jeanne
9

retrait de Marc (code 1)

X
1

Paule Lola
2 3

Isabelle
4

Jo Izabelle Michle Ali


5 6 7 8

Jeanne
9

recherche de Isabelle (code 1)

X
1

Paule Lola Isabelle


2 3 4

Jo Izabelle Michle Ali


5 6 7 8

Jeanne
9

retrait de Ali (code 8)

X
1

Paule Lola
2 3

Isabelle
4

Jo Izabelle Michle
5 6 7

X
8

Jeanne
9
34

Rsolution interne des collisions


(suite) Deuxime solution: on partitionne le tableau en deux :
- une zone d'adressage primaire - une zone de dbordement

Algorithme d'ajout d'un lment entr en collision : rechercher une place libre dans la zone de dbordement et y placer l'lment entr en collision

35

Exemple
Ajout de Lola (code associ par h5 : 2) puis de Isabelle (code associ par h5 : 1)

Marc
1

Paule
2 3 4

Jo
5

Izabelle Michle
6 7

Ali
8

Jeanne
9

Lola
10

Isabelle
11 12 13 14 15

Zone de dbordement ( la suite du tableau)

36

Recherche
1) on calcule le code associ cet lment x par la fonction d'adressage, soit p 2) on compare le contenu de la p-ime case de la table avec l'lment x : si identit, la recherche est positive, sinon on mne une recherche squentielle dans la zone de dbordement du tableau

37

et retrait
1) on calcule le code associ cet lment x par la fonction d'adressage, soit p 2) on compare le contenu de la p-ime case de la table avec l'lment x : si identit, on le supprime puis on place dans cette case une marque pour indiquer que l'lment supprim a pu provoquer d'ventuelles collisions si non identit, poursuivre la recherche squentiellement en cas d'ventuelles collisions, dans la zone de dbordement du tableau
38

Exemples
Marc
1

Paule
2 3 4

Jo
5

Izabelle Michle
6 7

Ali
8

Jeanne
9

Lola
10

Isabelle
11 12 13 14 15

Recherche de Ali (h5 : 8), puis Lola (h5 : 2) Retrait de Marc (h5 : 1) Recherche Isabelle (h5 : 1)
39

Mthodes de rsolution externe des collisions


"Externes " car on alloue des zones de stockage supplmentaires Le tableau contient, pour un code donn, deux informations :
- une place de rangement d'un lment (principal) ; - une liste de dbordement pour les lments entrs en collision avec l'lment prcdent

40

Ajout dun lment


Algorithme d'ajout d'un lment entr en collision :
- Crer la liste de dbordement associe ce code si celle-ci n'existe pas encore, - puis ajouter cette liste le nouvel lment

Exemple (avec h5): ajout de Lola (code 2)


Marc
1

Paule
2 3 4

Jo
5

Izabelle Michle
6 7

Ali
8

Jeanne
9

Lola
41

Exemples (suite)
ajout de Isabelle (1)
Marc
1

Paule
2 3 4

Jo
5

Izabelle Michle
6 7

Ali
8

Jeanne
9

Isabelle

Lola

ajout de Jos (1)


Marc
1

Paule
2 3 4

Jo
5

Izabelle Michle
6 7

Ali
8

Jeanne
9

Jos Isabelle

Lola
42

Recherche dun lment


1) on calcule le code associ cet lment x par la fonction d'adressage, soit p 2) on compare le contenu de la premire information de la p-ime case de la table avec l'lment x si identit, la recherche est positive ; sinon, on mne une recherche squentielle dans la liste associe Marc
1

Paule
2 3 4

Jo
5

Izabelle Michle
6 7

Ali
8

Jeanne
9

Jos Isabelle

Lola

recherche de Michle (7), puis Isabelle (1)

43

Retrait dun lment


1) on calcule le code associ cet lment x par la fonction d'adressage, soit p 2) on compare le contenu de la premire information de la p-ime case de la table avec l'lment x si identit, on retire llment et on le remplace par l'lment plac en tte de la liste associe, quand elle existe ; sinon on mne une recherche squentiellement dans la liste associe, avec retrait si la recherche est positive Marc
1

Paule
2 3 4

Jo
5

Izabelle Michle
6 7

Ali
8

Jeanne
9

Jos Isabelle

Lola

retrait de Michle (7), puis Lola (2) et enfin Marc (1) 44

Algorithmes de la mthode d'adressage dispers avec rsolution externe


type Info2 = agrgat
principal : chane dbord : Liste {premire chane associe un code donn} {objet Liste dont l'information est une chane}

fin
fonction code (uneChane) retourne (entier)
{retourne la valeur donne par la fonction dadressage}

paramtre (D) uneChane : chane


45

Procdure ajout (table, laChane)


{ajoute l'lment laChane dans une table, par adressage dispers, avec rsolution externe des collisions}

paramtres (D/R) table: tableau [1, TAILLEMAX] de Info2 (D) laChane : chane variables ok: boolen ind: entier dbut ind code(laChane) si table[ind].principal = " " alors {c'est la premire occurrence de ce code d'adressage} table[ind].principal laChane sinon {il y a collision: la place principale est dj occupe, do
ajout dans la liste de dbordement,en tte}

table[ind].dbord.premier() table[ind].dbord.insreAvant(laChane) fsi fin


46

Fonction recherche (table, laChane) retourne (boolen)


{recherche si l'lment laChane est prsent dans une table, par adressage dispers, avec rsolution externe des collisions}

paramtres (D) table: tableau [1, TAILLEMAX] de Info2 (D) laChane : chane variables trouv, ok: boolens; ind : entier dbut ind code(laChane) trouv table[ind].principal = laChane si non trouv {recherche de laChane dans la liste de dbordement} alors table[ind].dbord.premier() tant que non trouv et non table[ind].dbord.horsListe() faire trouv (table[ind].dbord.info() = laChane) table[ind].dbord.suivant() ftq fsi retourne (trouv) 47 fin

Fonction retrait (table, laChane) retourne boolen


{retire, si possible, llment laChane dune table construite par adressage dispers avec rsolution externe des collisions}

paramtres (D/R) table: tableau [1, TAILLEMAX] de Info2 (D) laChane : chane variables ok : boolen; ind : entier dbut ind code(laChane) trouv (table[ind].principal = laChane) si trouv {alors retrait de laChane du champ principal de la table} alors retraitPrincipal (table, laChane, ind) sinon {recherche, et ventuel retrait, de laChane dans la liste de
dbordement}

ok

rechercheRetraitDeborde (table, laChane, ind)


48

fsi retourne (ok) fin

Procdure retraitPrincipal (table, laChane, ind)


{retire llment laChane du champ Principal du code adresse ind; ce champ reoit la valeur de tte de la liste de dbordement si possible}

paramtres (D/R) table: tableau [1, TAILLEMAX] de Info2 (D) laChane : chane; ind : entier variables elt : Info2; ind : entier dbut si (table[ind].dbord.vide()) {il ny a pas eu de collision sur ce code} alors {ce code nadresse plus aucune chane} table[ind].principal " " sinon {on rcupre llment en tte de liste de dbordement} table[ind].dbord.premier() ; elt table[ind].dbord.info()
{pour mettre sa valeur dans le champ principal}

table[ind].principal elt fsi fin

{et puis on retire la cellule de tte de la liste de dbordement}

table[ind].dbord.supprimer()
49

Fonction rechercheRetraitDborde(table, laChane,ind)


{recherce et retire, si possible, llment laChane de la liste de dbordement du code adresse ind} paramtres (D/R) table: tableau [1, TAILLEMAX] de Info2 (D) laChane : chane; ind : entier variable trouv : boolen dbut table[ind].dbord.premier() trouv faux {recherche de laChane dans la !iste de dbordement} tant que non trouv et non table[ind].dbord.horsListe() faire trouv (table[ind].dbord.info() = laChane ) si non trouv alors table[ind].dbord.suivant() ftq {si trouv, alors retrait dans la liste de dbordement de la table} si trouv alors table[ind].dbord.supprimer() {le curseur est plac sur laChane} retourne (trouv) fin 50

Complexit des algorithmes

2003-2004

Algorithmique 6 : Recherche, complexit, tris

51

Complexit des algorithmes


Complexit temporelle, complexit spatiale
cot en temps: temps ncessaire l'excution cot en espace: espace mmoire ncessaire

Pire des cas, complexit moyenne


- la complexit dans le pire des cas n'est pas ncessairement une bonne indication du cot en pratique (exemple de la mthode du simplexe) - comment estimer le cas moyen ?

tude a priori, bancs d'essai et valuation a posteriori


- tude thorique - tude pratique de l'algorithme implment, bancs d'essai

2003-2004

Algorithmique 6 : Recherche, complexit, tris

52

Complexit d'un problme, complexit dun algorithme


contraintes sur un problme
par exemple, recherche d'un lment dans un tableau de n lments non tris : si l'lment n'est pas prsent, n comparaisons seront ncessaires pour le constater

Attention: si le tableau est tri, une seule peut tre suffisante !


- parmi les diffrents 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

53

Complexit asymptotique
Ncessit d'tudier la complexit pour de grosses quantits de donnes Exemple : deux algorithmes pour une mme tche:
- A1 effectue n2 oprations de base, A2 effectue n.log2 n oprations

Deux machines :
- M1 effectue 210 (environ mille) oprations par sconde - M2 effectue 220 (environ un million d') oprations par seconde

Temps de calcul (en secondes) :

2003-2004

Algorithmique 6 : Recherche, complexit, tris

54

Complexit asymptotique (2)


M1 A1 n = 210 210 n = 220 230 A2 10 20. 210 1 220 A1 M2 A2 < 0,01 20

2003-2004

Algorithmique 6 : Recherche, complexit, tris

55

Rapidit de croissance compare de certaines fonctions usuelles

2003-2004

Algorithmique 6 : Recherche, complexit, tris

56

Calcul de la complexit dun algorithme

Calcul de la valeur d'un polynme 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 57

Notations utilises
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 omga
f(n) = (g(n)) s'il existe C> 0 et no > 0 tels que f(n) C. g(n) pour tout n no

Grand thta
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 58

Exemples
f(n) = O(1) f est majore f(n) = (1) f est minore 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 intressante
2003-2004 Algorithmique 6 : Recherche, complexit, tris 59

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 intressante

2003-2004

Algorithmique 6 : Recherche, complexit, tris

60

Temps dexcution des algorithmes


Temps constant (rares algorithmes, cf. adressage dispers) O(1) Temps logarithmique (exemple: recherche dichotomique) O(log2n) Temps linaire (exemple: recherche squentielle) O(n) Temps polynomial O(nk) (coteux si k dpasse 3)
- quadratique - cubique O(n2) O(n3)

Temps exponentiel
2003-2004

O(cn)

( viter en gnral)
61

Algorithmique 6 : Recherche, complexit, tris

Comparaison des complexits d'algorithmes de la mme classe


Calcul de la valeur d'un polynme 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

62

Calcul de la valeur d'un polynme 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

63

Calcul de la valeur d'un polynme 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

64

Calcul de la complexit dalgorithmes de recherche simples

Oprations lmentaires retenues: les comparaisons 1. Recherche squentielle dans un tableau non tri
complexit au pire n comparaisons complexit moyenne n/2 comparaisons algorithme en O(n) complexit au pire n comparalsons complexit moyenne n/2 comparaisons algorithme en O(n)
Algorithmique 6 : Recherche, complexit, tris 65

2. Recherche squentielle dans un tableau tri


-

2003-2004

Recherche dichotomique (dans un tableau tri 1)


complexit au pire = complexit moyenne = nombre p d'intervalles considrs

Exemple avec n = 8 = 23
niveau 0 niveau 1 niveau 2 niveau 3

tableau de 8 lments

Profondeur de larbre de dcision de lordre de log2n : complexit algorithmique en O(log2n)


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

Tris

2003-2004

Algorithmique 6 : Recherche, complexit, tris

67

Tris
Donnes dans un ensemble d'lments S muni d'un ordre total ordre | a<a (rflexif) partiel | a < b et b < c => a < c (transitif) | a ~ b et b < a => a = b (antisymtrique) total | a,b a=b OU a<b OU b<a (total) Problme du tri lments al, ..., an ~ S donns trouver une permutation : { 1, . . ., n} { 1, . . .,n} telle que a(1) a(n)
En gnral, on s'intresse plutt au rsultat de l'application de
2003-2004 Algorithmique 6 : Recherche, complexit, tris 68

Tris internes et tris externes


- internes: l'ensemble des donnes peut tre trait en mmoire centrale - externes: on opre sur une partie des donnes seulement

Tris d'entiers: mthode des seaux


trier: des entiers entre 1 et m principe: - on cre m files d'attente vides numrotes 0, , m-1 - on parcourt linairement les donnes, et on place ai dans la file numrote ai - on place les files d'attente bout bout
2003-2004 Algorithmique 6 : Recherche, complexit, tris 69

Exemple m = 10, 4 7 3 2 8 1 5
1 0 1 2 2 3 3 4 4 5 5 6 7 7 8 8 9

Rsultat: 1, 2, 3, 4, 5, Estimation du cot : chaque lment peut tre plac dans une file en temps constant, d'o O(n) pour les n lments ; concatnation de m files en O(m) ; si m = 0(n), cot total en O(n).

2003-2004

Algorithmique 6 : Recherche, complexit, tris

70

Cette mthode peut tre gnralise des k-uplets d'entiers munis de l'ordre lexicographique, et plus gnralement des chanes (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 prfixe de t); ou bien il existe j tel que si < tj et si = ti pour tout i < j.

Exemples: 634 < 63472 64589 < 647

tri < triage seau < selle

Pour des suites de k-uplets dont chaque composante est un entier entre 0 et m-l, on obtient un algorithme de cot O((m+n)k).

2003-2004

Algorithmique 6 : Recherche, complexit, tris

71

Cas gnral: on trie des lments quelconques munis d'un ordre (total) la seule opration disponible est la comparaison de deux lments Exemple: tri de trois lments 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

72

Estimation du cot
Arbre binaire de hauteur h => au plus 2h feuilles Thorme Un arbre de dcision pour n lments a une hauteur suprieure ou gale log(n!).
- En effet, un arbre de dcision doit avoir au moins autant de feuilles que de rsultats 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 ncessaires est minor par n(logn - log e) = nlog n -1,44n

=> on ne peut pas esprer faire mieux que O(n log n)


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

Mthodes de tri lmentaires (1) Tri par slection


Donnes: un tableau de n lments trier Principe: pour chaque position successive dans le tableau, on cherche l'lment qui occupera cette position dans le tableau tri, et on l'y place en permutant cet lment avec l'lment courant. reste trier devrait se trouver dans la case courante

liste trie

case courante

liste trie

reste trier

2003-2004

Algorithmique 6 : Recherche, complexit, tris

74

20

18

24

13

27

32

12

36

15

17

19

2003-2004

Algorithmique 6 : Recherche, complexit, tris

75

Algorithme de tri par slection


procdure triSlection (tab, nbre) {recherche pour chaque case l'lment qui doit y tre affect et y place cet lment} paramtre s (D/R) tab: tableau [1, MAX] d'entiers (D) nbre: entier variables indDuMin, position: entier dbut pour position 1 nbre -1 faire indDuMin slection(tab, nbre, position,nbre)
{recherche lindice de llment 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 76

Algorithme de tri par slection (2)


fonction slection (tab, nbre, indDbut,indFin) retourne(entier) {recherche l'indice de l'lment minimum de tab entre indDbut et indFin} paramtre s (D) tab: tableau [1, MAX1 d'entiers (D) nbre, indDbut, indFin : entiers variables indDuMin, ind: entiers dbut indDuMin indDbut pour ind (indDbut + 1) indFin faire si tab[indDuMin] > tab[ind] alors indDuMin ind fpour retourner(indDuMin) fin
2003-2004 Algorithmique 6 : Recherche, complexit, tris 77

Mthodes de tri lmentaires (1) Tri par insertion


Donnes: un tableau de n lments trier Principe: la partie gauche est trie; on essaie d'insrer chaque nouvel lment dans cette liste, en dcalant d'un cran la partie droite restante. place du nouveau reste liste trie nouveau reste liste trie reste trier

2003-2004

Algorithmique 6 : Recherche, complexit, tris

78

20

18

24

13

27

32

12

36

15

17

19

2003-2004

Algorithmique 6 : Recherche, complexit, tris

79

Algorithme de tri par insertion


procdure triInsertion (tab, nbre) {recherche pour chaque lment la case o il doit tre affect et y place cet lment} paramtre s (D/R) tab: tableau [1, MAX] d'entiers (D) nbre: entier variables indVal, numPlace: entiers dbut pour indVal 2 nbre faire
{recherche de 1'endroit o doit s'insrer la valeur place en indVal}

numPlace Insertion(tab, nbre, indVal)


{si la valeur n'est pas insrer en fin de zne trie, l'insrer la place voulue}

si (numPlace indVal ) alors


{libre la position numPlace par dcalage et y place tab[indVal]}

dcalerEtPlacer(tab, numPlace, indVal) fsi


2003-2004

fpour fin

Algorithmique 6 : Recherche, complexit, tris

80

procdure dcalerEtPlacer(tab, nPlace, indVal)


{libre la position nPlace par dcalage et y place tab[indVall}

paramtre s (D/R) tab: tableau [1, MAX] d'entiers (D) nPlace, indVal: entiers variables indDuMin, ind, deCt: entiers dbut deCt tab[indVal]
{faire un trou au rang nPlace en dcalant 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] deCt fin
2003-2004 Algorithmique 6 : Recherche, complexit, tris 81

Simulation du dcalage

2003-2004

Algorithmique 6 : Recherche, complexit, tris

82

Deux algorithmes pour la recherche de place


1. Recherche squentielle dans un tableau tri fonction insertion (tab, nbre, indV) retourne(entier)
{renvoie la place laquelle il faut affecter tab[indV] pour respecter l'ordre}

paramtre s (D) tab: tableau [1, MAX] d'entiers (D) nbr, indV: entiers variables dpass: boolen; i, val, nbValTries: entiers dbut val tab[indV]; nbValTries indV - 1 dpass faux; i 0 tant que i < nbValTries ET non dpass faire ii+ 1 dpass (tab[i] > val) ftq si dpass alors retourne (i) sinon retourne (i+l) fsi fin
2003-2004 Algorithmique 6 : Recherche, complexit, tris 83

Simulation du tri par insertion squentielle

2003-2004

Algorithmique 6 : Recherche, complexit, tris

84

2. Recherche dichotomique fonction insertion (tab, nbre, indV) retourne (entier)


{renvoie la place laquelle ilfaut affecter tab[indV] pour respecter l'ordre}

paramtre s (D) tab: tableau [1, MAX] d'entiers (D) nbr, indV: entiers variables id, if, im, val: entiers dbut 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 85

Simulation du tri par insertion dichotomique

2003-2004

Algorithmique 6 : Recherche, complexit, tris

86

Complexit des tris lmentaires


Cot du tri par slection
- 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)

Cot 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 87

Tris indirects
Problme : tri sur diffrents critres On veut mmoriser les rsultats des tris par nom, par taille, par date
Rep[1] nom taille date
2003-2004

Rep[2] toto.o 3 456 13.04.01

Rep[3] toto 5 248 15.04.1


88

toto.C 20 457 12.04.01

Algorithmique 6 : Recherche, complexit, tris

Solution : utilisation de tableaux dindices


On utilise trois tableaux diffrents qui contiennent non les agrgats, mais les indices des agrgats dans le tableau
triNom triTaille triDate
2003-2004

3 2 1

1 3 2

2 1 3
89

Algorithmique 6 : Recherche, complexit, tris

Tris indirects (suite)


Dans lalgorithme de tri, la comparaison de deux agrgats se fait relativement un critre (nom, taille, date) : prcde(i, j, Critre, tab) fonction qui retourne vrai si le fichier tab[i] prcde le fichier tab[j] relativement au critre Critre
2003-2004 Algorithmique 6 : Recherche, complexit, tris 90

Fin du volume 6

2003-2004

Algorithmique 6 : Recherche, complexit, tris

91