Upload
mimoun-kandoussi
View
220
Download
0
Embed Size (px)
Citation preview
8/13/2019 coursAlgo_V6
1/91
Algorithmique : Volume 6
iUT ORSAY
Universit Paris XI
I.U.T. d'Orsay
Dpartement Informatique
Anne scolaire 2003-2004
Recherche Adressage dispers
Tris
Complexit
Ccile Balkanski, Nelly Bensimon, Grard Ligozat
8/13/2019 coursAlgo_V6
2/91
Recherche
2003-2004 Algorithmique 6 : Recherche,complexit, tris
2
8/13/2019 coursAlgo_V6
3/91
Recherche
Problme gnral abstraitensemble de valeurs E, lment a; est-ce que a E?rponse: boolen (x) { xE | x=a }
plus gnralementexiste-t-il x vrifiant certains critres
2003-2004 Algorithmique 6 : Recherche, complexit, tris 3
(x) { xE | (x)}
trouver tous les x satisfaisant certains critres
{ xE | (x)} (bases de donnes)
8/13/2019 coursAlgo_V6
4/91
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)
2003-2004 Algorithmique 6 : Recherche, complexit, tris 4
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
8/13/2019 coursAlgo_V6
5/91
32
18
9
5
24
27
20
19
13
arbre binaire de recherche
2003-2004 Algorithmique 6 : Recherche, complexit, tris 5
368
12
15
177
8/13/2019 coursAlgo_V6
6/91
Tri de donnes complexes Exemple de donne complexe:
type Etudiant = agrgatnom: chanege: entierclassement: entier
2003-2004 Algorithmique 6 : Recherche, complexit, tris 6
photo: fichier_GIFfin
on peut trier par nom (ordre alphabtique), par ge, parclassement
pas par photo
cls, cls primaires ex-aequo, mme ge
8/13/2019 coursAlgo_V6
7/91
Recherche et type de donnes On utilise divers types de donnes sur lesquelles
on fait des oprations de base:- ajout
- suppression
- mise- jour
2003-2004 Algorithmique 6 : Recherche, complexit, tris 7
- consultation
Chaque structure a des avantages et desinconvnients :
tableau, tableau tri, arbre binaire, liste chane,etc.
8/13/2019 coursAlgo_V6
8/91
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: entiervariables trouv: boolen i: entier
2003-2004 Algorithmique 6 : Recherche, complexit, tris 8
i 0
tant que non trouv ET i < nbr fairei i+ 1
trouv (tab[i] = val)
ftqretourne (trouv)
fin
8/13/2019 coursAlgo_V6
9/91
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: entierdbut
trouv faux
2003-2004 Algorithmique 6 : Recherche, complexit, tris 9
i 0tant que non trouv ET i < nbr faire
i i+1
trouv (tab[i] = val)ftqsi trouv alors retourne (i) sinon retourne (-1) fsi
fin
8/13/2019 coursAlgo_V6
10/91
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: entiervariables id, ir: entiersdbut ir 0
2003-2004 Algorithmique 6 : Recherche, complexit, tris 10
pour id l nbre_d fairesi (tab_d[id] val)
alors irir+ 1
tab_r[ir] tab_d[id]fsi
fpourfin
8/13/2019 coursAlgo_V6
11/91
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 : entiersdbut
imin tab[l]
2003-2004 Algorithmique 6 : Recherche, complexit, tris 11
pour id 2 nbre fairesi (tab[i] < min)
alors min tab[i]
fsifpourretourne (tab[min])
fin
8/13/2019 coursAlgo_V6
12/91
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: entiervariables i, imin, min: entiersdbut
min tab[1]
imin 1
our id 2 nbre faire
2003-2004 Algorithmique 6 : Recherche, complexit, tris 12
si (tab[i] min)alors min tab[i]
imin i
fsifpourretourne (imin)
fin
8/13/2019 coursAlgo_V6
13/91
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 : entierdbuttrouv faux d ass faux i 0
2003-2004 Algorithmique 6 : Recherche, complexit, tris 13
tant que non (trouv OU dpass) ET i < nbr fairei i+ 1
trouv (tab[i] = val)
dpass (tab[i] > val)ftqsi trouv alors retourne (i) sinon retourne(-1)fin
8/13/2019 coursAlgo_V6
14/91
Recherche dichotomique
Rappel: les valeurs doivent tre tries !
Principe:
2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36
2003-2004 Algorithmique 6 : Recherche, complexit, tris 14
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, ilsuffit de chercher droite
8/13/2019 coursAlgo_V6
15/91
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
8/13/2019 coursAlgo_V6
16/91
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
8/13/2019 coursAlgo_V6
17/91
Recherche dichotomiquefonction rechDicho (tab, nbre, val) retourne(entier){renvoie un 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 : boolen ; id, if, im: entiers
dbuttrouv faux; id 0 ; if nbre + 1tant que non trouv ET (if - id) > 1 faire
im (id + if)/2
2003-2004 Algorithmique 6 : Recherche, complexit, tris 17
rouv a m = va
si (tab[im] > val) alors if imsinon id im
fsiftq
si (id = 0) alors retourne (-1)sinon si (tab[id]=val) alors retourne(id)sinon retourne (-1)
fsifsi
fin
8/13/2019 coursAlgo_V6
18/91
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
dbutid 0; if nbre+1tant que (if - id) > 1 faire
im (id + if)/2
2003-2004 Algorithmique 6 : Recherche, complexit, tris 18
s ta m > va a ors m
sinon id imfsi
ftqsi (id = 0) alors retourne (-1)
sinon si (tab[id]=val) alors retourne(id)sinon retourne (-1)
fsifsi
fin
8/13/2019 coursAlgo_V6
19/91
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
variablesid, if, im: entier
dbutid 0 ; if nbre+ 1tant que (if - id) > 1 faire
im (id + if)/2
2003-2004 Algorithmique 6 : Recherche, complexit, tris 19
s ta m va a ors m
sinon id imfsi
ftqsi (if = nbre + 1) alors retourne (-1)
sinon si (tab[if]=val) alors retourne(if)sinon retourne(-1)
fsifsi
fin
8/13/2019 coursAlgo_V6
20/91
8/13/2019 coursAlgo_V6
21/91
32
18
9
5
24
27
20
19
13
Simulation de recherche
2003-2004 Algorithmique 6 : Recherche, complexit, tris 21
368
12
15
177
8/13/2019 coursAlgo_V6
22/91
2003-2004 Algorithmique 6 : Recherche, complexit, tris 22
8/13/2019 coursAlgo_V6
23/91
Adressage Dispers
2003-2004 Algorithmique 6 : Recherche,complexit, tris
23
8/13/2019 coursAlgo_V6
24/91
Adressage dispers
Objectif: classer M lments dans un tableau
Principe: dans un tableau de pcases, on classel'lment x, lindice k, donn par une fonctiond'adressage h
24
- classer un lment x entier k, compris entre 1 et p Fonction h: h(x)=k
- la valeur kne dpend que de l'lment x;
- l'lment xn'est pas plac relativement aux autreslments
8/13/2019 coursAlgo_V6
25/91
Quelques exemples de fonctionsdadressage
x : chane h1(x) = nombre de caractres de la chane
h1("Paul") = 4 h1("MmeDupont")=9
x: entier h2(x) = somme de ses chiffres dcimaux
25
2 2
x: entier h3(x)= nombre de bits 1 dans l'criturebinaire
h3
(342) = h3
(101010010) = 4
x: chane de caractres
h4(x) = somme des codes ASCII des caractres de la chane
8/13/2019 coursAlgo_V6
26/91
8/13/2019 coursAlgo_V6
27/91
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
* * * *
27
- 5 = = =
- 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 Michle Jeanne
1 2 3 4 5 6 7 8 9
8/13/2019 coursAlgo_V6
28/91
Recherche dun lment
Algorithme de recherche d'un lment x dans
une table construite par adressage dispersd'une suite d'lments :
28
1) on calcule le code associ cet lment x par lafonction dadressage, soit p.
2) on compare le contenu de la p-ime case de la tableavec llment x : si identit, la recherche est positive,
sinon elle est ngative.
8/13/2019 coursAlgo_V6
29/91
Ajout dun lment
Algorithme d'ajout d'un lment X dans une
table construite par adressage dispers d'unesuite d'lments:
29
1) on calcule le code associ cet lment par lafonction d'adressage, soit p.
2) on affecte l'lment la p-ime place dans la table,
condition toutefois que cette place ne soit pasdj occupe risque de collision
8/13/2019 coursAlgo_V6
30/91
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] : " "
30
ajout possible
Ajout de "Lola"- code associ par h5 : 2 ; or tabAdrDisp [2] : "Paule"
collision
Marc Paule Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
8/13/2019 coursAlgo_V6
31/91
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
31
placer l'lment entr en collision.
- arriv la dernire case du tableau, continuer la recherche la premirecase du tableau.
Exemples: "Lola" (avec h5 : 2) et "Isabelle" (avec h5 : 1)
Marc Paule Lola Isabelle Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
8/13/2019 coursAlgo_V6
32/91
8/13/2019 coursAlgo_V6
33/91
Recherche dun lment
1) on calcule le code associ cet lment xpar la
fonction d'adressage : soit p.
2) on compare le contenu de la p-ime case de la table'
33
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 ouparcours jusqu (p-1)
8/13/2019 coursAlgo_V6
34/91
Exemples (avec h5 )
retrait de Marc (code 1)
Marc Paule Lola Isabelle Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
X Paule Lola Isabelle Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
34
retrait de Ali (code 8)
recherche de Isabelle (code 1)
X Paule Lola Isabelle Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
X Paule Lola Isabelle Jo Izabelle Michle X Jeanne
1 2 3 4 5 6 7 8 9
8/13/2019 coursAlgo_V6
35/91
Rsolution interne des collisions
(suite)
Deuxime solution: on partitionne le tableau en
deux :- une zone d'adressage primaire
35
-
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
8/13/2019 coursAlgo_V6
36/91
8/13/2019 coursAlgo_V6
37/91
Recherche
1) on calcule le code associ cet lment xpar la
fonction d'adressage, soit p
2) on compare le contenu de la p-ime case de la table
37
avec men x : s en , a rec erc e es pos ve,
sinon on mne une recherche squentielle dans lazone de dbordement du tableau
8/13/2019 coursAlgo_V6
38/91
et retrait
1) on calcule le code associ cet lment xpar lafonction d'adressage, soit p
2) on compare le contenu de la p-ime case de la tableavec l'lment x :
38
si identit, on le supprime puis on place dans cettecase 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
8/13/2019 coursAlgo_V6
39/91
8/13/2019 coursAlgo_V6
40/91
Mthodes de rsolution externe descollisions
"Externes " car on alloue des zones de stockagesupplmentaires
40
Le tableau contient, pour un code donn, deuxinformations :
- une place de rangement d'un lment (principal) ;
- une liste de dbordement pour les lments entrsen collision avec l'lment prcdent
8/13/2019 coursAlgo_V6
41/91
Ajout dun lment
Algorithme d'ajout d'un lment entr en collision :
- Crer la liste de dbordement associe ce code sicelle-ci n'existe pas encore,
- puis ajouter cette liste le nouvel lment
41
Exemple (avec h5): ajout de Lola (code 2)
Lola
Marc Paule Jo Izabelle Michle Ali Jeanne1 2 3 4 5 6 7 8 9
8/13/2019 coursAlgo_V6
42/91
Exemples (suite)
ajout de Isabelle (1)
Marc Paule Jo Izabelle Michle Ali Jeanne1 2 3 4 5 6 7 8 9
42
ajout de Jos (1)
Marc Paule Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
Isabelle
Jos Lola
Recherche dun lment
8/13/2019 coursAlgo_V6
43/91
Recherche dun lment
1) on calcule le code associ cet lment xpar lafonction d'adressage, soit p
2) on compare le contenu de la premire information dela p-ime case de la table avec l'lment x
si identit, la recherche est positive ;
43
sinon, on mne une recherche squentielle dansla liste associe
recherche de Michle (7),
puis Isabelle (1)
Marc Paule Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
Jos Lola
Isabelle
Retrait dun lment
8/13/2019 coursAlgo_V6
44/91
Retrait d un lment
1) on calcule le code associ cet lment xpar la fonctiond'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'l-
ment plac en tte de la liste associe, quand elle existe ;
44
sinon on mne une recherche squentiellement dans laliste associe, avec retrait si la recherche est positive
retrait de Michle (7),
puis Lola (2) et enfin Marc (1)
Marc Paule Jo Izabelle Michle Ali Jeanne
1 2 3 4 5 6 7 8 9
Isabelle
Jos Lola
Algorithmes de la mthode
8/13/2019 coursAlgo_V6
45/91
Algorithmes de la mthode
d'adressage dispers avec rsolutionexterne
type Info2 = agrgatprincipal : chane {premire chane associe un code donn}dbord : Liste {objet Liste dont l'information est une chane}
45
fin
fonction code (uneChane) retourne (entier)
{retourne la valeur donne par la fonction dadressage}paramtre (D) uneChane : chane
P d j t (t bl l Ch )
8/13/2019 coursAlgo_V6
46/91
Procdure ajout (table, laChane){ajoute l'lment laChane dans une table, par adressage dispers, avecrsolution externe des collisions}
paramtres (D/R) table: tableau [1, TAILLEMAX] de Info2(D) laChane : chane
variables ok: boolenind: entierdbut
46
si table[ind].principal = " "alors {c'est la premire occurrence de ce code d'adressage}
table[ind].principal laChanesinon {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)
fsifin
Fonction recherche (table, laChane) retourne (boolen)
8/13/2019 coursAlgo_V6
47/91
{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
dbutind code(laChane)trouv table[ind].principal = laChane
47
alors table[ind].dbord.premier()tant que non trouv et
non table[ind].dbord.horsListe() fairetrouv (table[ind].dbord.info() = laChane)table[ind].dbord.suivant()
ftqfsiretourne (trouv)
fin
Fonction retrait (table, laChane) retourne boolen
8/13/2019 coursAlgo_V6
48/91
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 : entierdbut
ind code(laChane)
48
rouv a e n .pr nc pa = a a ne
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)
fsiretourne (ok)
fin
8/13/2019 coursAlgo_V6
49/91
Fonction rechercheRetraitDborde(table, laChane,ind)
8/13/2019 coursAlgo_V6
50/91
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
dbuttable[ind].dbord.premier()
trouv faux
50
rec erc e e a a ne ans a s e e or emen
tant que non trouv et non table[ind].dbord.horsListe() fairetrouv (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
8/13/2019 coursAlgo_V6
51/91
Complexit des algorithmes
2003-2004 Algorithmique 6 : Recherche,complexit, tris
51
Complexit des algorithmes
8/13/2019 coursAlgo_V6
52/91
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
2003-2004 Algorithmique 6 : Recherche, complexit, tris 52
indication du cot en pratique (exemple de la mthode du simplexe)
- comment estimer le cas moyen ?
tude apriori, bancs d'essai et valuation a posteriori- tude thorique
- tude pratique de l'algorithme implment, bancs d'essai
l d bl l d
8/13/2019 coursAlgo_V6
53/91
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
2003-2004 Algorithmique 6 : Recherche, complexit, tris 53
compara sons seront n cessa res pour e 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
Complexit asymptotique
8/13/2019 coursAlgo_V6
54/91
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
2003-2004 Algorithmique 6 : Recherche, complexit, tris 54
- M1 effectue 210 (environ mille) oprations par sconde- M2 effectue 220 (environ un million d') oprations par seconde
Temps de calcul (en secondes) :
Complexit asymptotique (2)
8/13/2019 coursAlgo_V6
55/91
M1 M2
A1 A2 A1 A2
Complexit asymptotique (2)
2003-2004 Algorithmique 6 : Recherche, complexit, tris 55
n = < ,
n = 220 230 20. 210 220 20
R idi d i
8/13/2019 coursAlgo_V6
56/91
Rapidit de croissance compare
de certaines fonctions usuelles
2003-2004 Algorithmique 6 : Recherche, complexit, tris 56
Calcul de la complexit dun algorithme
8/13/2019 coursAlgo_V6
57/91
Calcul de la valeur d'un polynme en un point1. 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
2003-2004 Algorithmique 6 : Recherche, complexit, tris 57
Nombre de multiplicationsen 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.
Notations utilises
8/13/2019 coursAlgo_V6
58/91
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
2003-2004 Algorithmique 6 : Recherche, complexit, tris 58
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
E l
8/13/2019 coursAlgo_V6
59/91
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)
2003-2004 Algorithmique 6 : Recherche, complexit, tris 59
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
8/13/2019 coursAlgo_V6
60/91
8/13/2019 coursAlgo_V6
61/91
Temps dexcution des algorithmes
Temps constant (rares algorithmes, cf. adressagedispers) O(1)
Temps logarithmique (exemple: recherche
2003-2004 Algorithmique 6 : Recherche, complexit, tris 61
2
Temps linaire (exemple: recherche squentielle) O(n) Temps polynomial O(nk) (coteux si k dpasse 3)
- quadratique O(n2)
- cubique O(n3)
Temps exponentiel O(cn) ( viter en gnral)
Comparaison des complexits d'algorithmes de la
mme classe
8/13/2019 coursAlgo_V6
62/91
mme classe
Calcul de la valeur d'un polynme en un point (1)
p a[0]
pour i 1 n faire
2003-2004 Algorithmique 6 : Recherche, complexit, tris 62
xpi puissance(x, i)p p + a[i]* xpi
fpourn(n+1)/2 multiplications, n additions : algorithme en O(n2)
8/13/2019 coursAlgo_V6
63/91
Calcul de la valeur d'un polynme en un point (2)
p a[0]
xpi 1
pour i 1 n faire
x i x i * x
2003-2004 Algorithmique 6 : Recherche, complexit, tris 63
p p + a[i]* xpifpour
2n multiplications, n additions : algorithme en O(n)
8/13/2019 coursAlgo_V6
64/91
Calcul de la complexit dalgorithmes de recherche simples
8/13/2019 coursAlgo_V6
65/91
Oprations lmentaires retenues: lescomparaisons
1. Recherche squentielle dans un tableau nontri
- complexit au pire n comparaisons
2003-2004 Algorithmique 6 : Recherche, complexit, tris 65
- comp ex t moyenne n compara sons
algorithme en O(n)2. Recherche squentielle dans un tableau tri
- complexit au pire n comparalsons- complexit moyenne n/2 comparaisons
algorithme en O(n)
Recherche dichotomique (dans un tableau tri 1)
l it i l it
8/13/2019 coursAlgo_V6
66/91
- complexit au pire = complexit moyenne =
nombre p d'intervalles considrs
Exemple avec n = 8 = 23 tableau de 8 lments
niveau 0
niveau 1
2003-2004 Algorithmique 6 : Recherche, complexit, tris 66
niveau 2
niveau 3
Profondeur de larbre de dcision de lordre de log2n :
complexit algorithmique en O(log2n)
8/13/2019 coursAlgo_V6
67/91
Tris
2003-2004 Algorithmique 6 : Recherche,complexit, tris 67
Tris
8/13/2019 coursAlgo_V6
68/91
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
8/13/2019 coursAlgo_V6
69/91
- internes: l'ensemble des donnes peut tre trait en mmoirecentrale
- externes: on opre sur une partie des donnes seulement
Tris d'entiers: mthode des seaux trier: des entiers entre 1 et m
2003-2004 Algorithmique 6 : Recherche, complexit, tris 69
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
Exemple m = 10, 4 7 3 2 8 1 5
8/13/2019 coursAlgo_V6
70/91
p ,
Rsultat: 1, 2, 3, 4, 5,
Estimation du cot :
1 2 3 4 5 7 8
0 1 2 3 4 5 6 7 8 9
2003-2004 Algorithmique 6 : Recherche, complexit, tris 70
- chaque lment peut tre plac dans une file en tempsconstant, d'o O(n) pour les n lments ;
- concatnation de m files en O(m) ;
- si m = 0(n), cot total en O(n).
Cette mthode peut tre gnralise des k uplets d'entiers
8/13/2019 coursAlgo_V6
71/91
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:
2003-2004 Algorithmique 6 : Recherche, complexit, tris 71
634 < 63472 tri < triage64589 < 647 seau < selle
Pour des suites de k-uplets dont chaque composante est un entierentre 0 et m-l, on obtient un algorithme de cot O((m+n)k).
Cas gnral:
- on trie des lments quelconques munis d'un ordre (total)
8/13/2019 coursAlgo_V6
72/91
- la seule opration disponible est la comparaison de deux lments
Exemple: tri de trois lments a, b, c
a
8/13/2019 coursAlgo_V6
73/91
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!).
2003-2004 Algorithmique 6 : Recherche, complexit, tris 73
- 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 arbreest log(n!)
Estimation
Formule de Stirling: n! approxim par (n/e)n, donc le nombre de tests ncessaires estminor par n(logn - log e) = nlog n -1,44n
=> on ne peut pas esprer faire mieux que O(n log n)
Mthodes de tri lmentaires (1)
Tri par slection
8/13/2019 coursAlgo_V6
74/91
p
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
2003-2004 Algorithmique 6 : Recherche, complexit, tris 74
liste trie
liste trie
case courantedevrait se trouverdans la case courante
reste trier
20 18 9 5 24 13 27 2 8 32 7 12 36 15 17 19
8/13/2019 coursAlgo_V6
75/91
2003-2004 Algorithmique 6 : Recherche, complexit, tris 75
8/13/2019 coursAlgo_V6
76/91
Algorithme de tri par slectionprocdure 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, osition: entier
2003-2004 Algorithmique 6 : Recherche, complexit, tris 76
dbut
pour position 1 nbre -1 faireindDuMin 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}
fpourfin
8/13/2019 coursAlgo_V6
77/91
Mthodes de tri lmentaires (1)
Tri par insertion
8/13/2019 coursAlgo_V6
78/91
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
2003-2004 Algorithmique 6 : Recherche, complexit, tris 78
liste trie
liste trie reste trier
nouveau
reste
20 18 9 5 24 13 27 2 8 32 7 12 36 15 17 19
8/13/2019 coursAlgo_V6
79/91
2003-2004 Algorithmique 6 : Recherche, complexit, tris 79
Algorithme de tri par insertionprocdure triInsertion (tab, nbre)
8/13/2019 coursAlgo_V6
80/91
{recherche pour chaque lment la case o il doit tre affect et y place cetlment}
paramtre s (D/R) tab: tableau [1, MAX] d'entiers(D) nbre: entier
variables indVal, numPlace: entiersdbutpour indVal 2 nbre faire
2003-2004 Algorithmique 6 : Recherche, complexit, tris 80
{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 numPlacepar dcalage et y place tab[indVal]}
dcalerEtPlacer(tab, numPlace, indVal)fsi
fpourfin
8/13/2019 coursAlgo_V6
81/91
procdure dcalerEtPlacer(tab, nPlace, indVal){libre la position nPlacepar 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
2003-2004 Algorithmique 6 : Recherche, complexit, tris 81
u
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
8/13/2019 coursAlgo_V6
82/91
Simulation du dcalage
2003-2004 Algorithmique 6 : Recherche, complexit, tris 82
8/13/2019 coursAlgo_V6
83/91
Simulation du tri par insertion squentielle
8/13/2019 coursAlgo_V6
84/91
2003-2004 Algorithmique 6 : Recherche, complexit, tris 84
8/13/2019 coursAlgo_V6
85/91
Simulation du tri par insertion dichotomique
8/13/2019 coursAlgo_V6
86/91
2003-2004 Algorithmique 6 : Recherche, complexit, tris 86
Complexit des tris lmentaires
8/13/2019 coursAlgo_V6
87/91
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)
2003-2004 Algorithmique 6 : Recherche, complexit, tris 87
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)
Tris indirects
8/13/2019 coursAlgo_V6
88/91
Problme : tri sur diffrents critres
On veut mmoriser les rsultats des tris par
nom, par taille, par date
2003-2004 Algorithmique 6 : Recherche, complexit, tris 88
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
Solution : utilisation
d t bl di di
8/13/2019 coursAlgo_V6
89/91
de tableaux dindices
On utilise trois tableaux diffrents quicontiennent non les agrgats, mais lesindicesdes a r ats dans le tableau
2003-2004 Algorithmique 6 : Recherche, complexit, tris 89
3 1 2triNom
triTaille
triDate
2 3 1
1 2 3
T i i di t ( it )
8/13/2019 coursAlgo_V6
90/91
Tris indirects (suite)
Dans lalgorithme de tri, la comparaison dedeux agrgats se fait relativement uncritre nom taille date :
2003-2004 Algorithmique 6 : Recherche, complexit, tris 90
prcde(i, j, Critre, tab)fonction qui retourne vraisi le fichier tab[i]prcde le fichier tab[j]relativement au
critre Critre
8/13/2019 coursAlgo_V6
91/91