0% ont trouvé ce document utile (0 vote)
37 vues6 pages

Complexité et Algorithmes sur Tableaux

chapitre 2

Transféré par

zinssaf
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
37 vues6 pages

Complexité et Algorithmes sur Tableaux

chapitre 2

Transféré par

zinssaf
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

13/03/2014

Notion de complexité d'un algorithme


Faculté des Sciences Tétouan
Département d’Informatique Pour évaluer l’efficacité
efficacité d'un algorithme, on calcule sa complexité

Mesurer la complexité revient à quantifier le temps d'exécution et l'espace


mémoire nécessaire

Le temps d'exécution est proportionnel au nombre des opérations


Complexité d'un algorithme effectuées. Pour mesurer la complexité en temps, on met en évidence
certaines opérations fondamentales, puis on les compte

Le nombre d'opérations dépend généralement du nombre de données à


traiter. Ainsi, la complexité est une fonction de la taille des données. On
s'intéresse souvent à son ordre de grandeur asymptotique

Said EL GAROUANI
En général, on s'intéresse à la complexité dans le pire des cas et à la
complexité moyenne
1 2

Structures de données Structures de données


avancées : les tableaux avancées : les tableaux

• Organisation contiguë des données : les • Remarque : les données doivent être du
éléments sont placés l’un à côté de l’autre. même type.
• Syntaxe :
var tab : tableau[indices] de éléments; • Pour accéder au k ième élément du tableau
où indices est l’ensemble des indices tab, on note tab[k].
• Exemple :
var tab :tableau[0..9] de entiers;

3 4

Algorithmes sur les Algorithmes sur les


tableaux tableaux

• Recherche d’un élément : deux types de • Recherche d’un élément :


recherche : Algorithme rechercher(x,tab,nbr)
var x : élément;
i,nbr : entier ;
Question 1 : est-ce que l’élément figure dans le trouvé : booléen;
tab : tableau[1…TailleMax] de élément;
tableau ? debut
trouvé faux;
pour i = 1 à nbr faire
Question 2 : si oui quel est son indice dans le si tab[i] = x alors trouvé vrai;
tableau ? fin pour
retourner trouvé;
fin
5 6

1
13/03/2014

Algorithmes sur les Recherche séquentielle : complexité

tableaux Pour évaluer l’efficacité de l'algorithme de recherche séquentielle, on va


calculer sa complexité dans le pire des cas. Pour cela on va compter le
nombre de tests effectués
• Recherche de l’indice d’un élément dans un tableau :
Le pire des cas pour cet algorithme correspond au cas où x n'est pas dans
Algorithme rechercher_indice(x,tab,nbr) le tableau T
var x : élément;
i,indice,nbr : entier ; Si x n’est pas dans le tableau, on effectue 3N tests : on répète N fois les
tab : tableau[1…TailleMax] de élément; tests (i < N), (Trouvé=Faux) et (T[i]=x)
debut
indice -1; La complexité dans le pire des cas est d'ordre N,N (on note O(N))
O(N)
pour i = 1 à nbr faire
si tab[i] = x alors indice i; Pour un ordinateur qui effectue 106 tests par seconde on a :
fin pour
retourner indice; N 103 106 109
fin
7 Temps 1ms 1s 16mn40s 8

Algorithmes sur les Algorithmes sur les


tableaux tableaux
• Recherche d’un élément dans un tableau trié :
• Recherche d’un élément dans un tableau trié :
recherche « naïve » :
recherche dichotomique
principe : parcourir le tableau jusqu’à trouver Principe :
l’élément recherché. i) On compare l ’élément à l ’élément du milieu du
Critique de la méthode : on n’exploite pas le fait tableau.
que le tableau est trié.
Première solution : s’arrêter dès que l’on ii) Si égales ⇒ arrêt.
rencontre un élément plus grand que l’élément
recherché.
Deuxième solution : faire une recherche iii) Sinon, on effectue la recherche à la moitié du
dichotomique. tableau.
9 10

Algorithmes sur les


Exemple d'exécution
tableaux Considérons le tableau T :
• Recherche dichotomique : 4 6 10 15 17 18 24 27 30
Algorithme recherche_dicho(x,nbr,tab)
var x : élément; Si la valeur cherché est 20 alors les indices g, d
nbr : entier; et m vont évoluer comme suit : g 0 5 5 6
tab : tableau[1…TailleMax] de élément;
trouvé : booléen;
début
d nbr; g 0; trouvé faux; d 8 8 5 5
tant que g <= d faire Si la valeur cherché est 10 alors les indices g, d
m (d+g)/2; et m vont évoluer comme suit :
si tab[m] = x alors trouvé vrai; m 4 6 5
sinon si tab[m] > x alors d m-1;
sinon g m+1; g 0 0 2
fin si;
fin si;
fin tant que;
retourner trouvé; d 8 3 3
fin;

11 m 4 1 2 12

2
13/03/2014

Algorithmes sur les


Recherche dichotomique : complexité
tableaux
La complexité dans le pire des cas est d'ordre log 2 N

• Insertion d’un élément dans un tableau : deux


L'écart de performances entre la recherche séquentielle et la cas de figure :
recherche dichotomique est considérable pour les grandes
valeurs de N
Le tableau n’est pas trié : on insère à la fin
− Exemple: au lieu de N=1milion ≈220 opérations à ou bien à un endroit spécifié.
effectuer avec une recherche séquentielle il suffit de 20
opérations avec une recherche dichotomique
Le tableau est trié l’élément doit être
inséré au bon endroit.
13 14

Algorithmes sur les Algorithmes sur les


tableaux tableaux

• Insertion d’un élément à une position k dans • Insertion d’un élément à une position k dans un
un tableau : tableau :
Algorithme inserer_position(x,pos,nbr,tab)
var x : élément;
Principe : pos,i,nbr : entier;
tab : tableau[1…TailleMax] de élément;
début
i) On décale d’un cran tous les éléments du tableau pour i = nbr+1 à pos+1 par pas de –1 faire
à partir de la position k+1 vers la droite. tab[i] tab[i-1];
fin pour;
ii) On insère l’élément à sa place. tab[pos] x;
nbr nbr+1;
15
fin; 16

Algorithmes sur les Algorithmes sur les


tableaux tableaux
• Insertion d’un élément dans un tableau trié
Algorithme inserer_trie(x,nbr,tab)
var x : élément;
• Insertion d’un élément dans un tableau trié pos,i,nbr : entier;
tab : tableau[1…TailleMax] de élément;
Principe : début
pos 1;
tant que tab[pos] < x et pos < nbr faire
i) On cherche la position k où l’on doit insérer pos pos+1;
l’élément. fin tant que;
si pos = nbr alors tab[nbr+1] x;
sinon
ii) On décale d’un cran tous les éléments du tableau à pour i = nbr+1 à pos+1 par pas de –1 faire
partir de la position k+1 vers la droite. tab[i] tab[i-1];
fin pour;
tab[pos] x;
iii) On insère l’élément à sa place. fin si;
nbr nbr+1;
fin;
17 18

3
13/03/2014

Récursivité
Récursivité
Raisonnement par récurrence
hypothèse de récurrence
• Exemple : Montrer que : n
n( n + 1)
S (n) = ∑ i =
Preuve : i =0 2 n +1 n

Cas de base : S ( n + 1) = ∑ i = ( ∑ i ) + ( n + 1) = S ( n ) + ( n + 1)
i=0 i=0
0
0 ( 0 + 1)
– n=0: S (0 ) = ∑i=0= = 0 (Vrai)
i=0 2
1
1 (1 + 1 )
– n=1: S (1 ) = ∑ i = 0 +1= =1 (Vrai)
i= 0 2 n ( n + 1)
= + ( n + 1)
Récurrence : 2
n ( n + 1)( n + 2 )
Hypothèse : S(n) est vrai, = ( n + 1)( + 1) = (Vrai )
2 2
montrer que S(n+1) est vrai

19 20

Récursivité Récursivité
Équations de récurrences • Action récursive
• Base : S(0) = 0 « une action A est exprimée de façon récursive si la
• Récurrence : S(n+1) = S(n)+(n+1) décomposition de A fait appel à A. »
• Action calculer S(n) :
La récursivité est un
Appliquer les deux règles suivantes:
mécanisme de calcul puissant!!
1) S(0) = 0
Résoudre un problème de taille n 2) S(n) = S(n-1) + n , n>0
peut se ramener d’un (plusieurs) sous S(3) ?
problèmes de taille plus réduite ... = S(2) +3 = (S(1)+2 ) +3
= ((S(0)+1)+2)+3 = ((0+1)+2)+3 = 6

21 22

Récursivité
• Objet récursif Récursivité
• Exemple (suite)
« La définition d ’un objet est récursive lorsqu’elle se
D’après la définition précédente :
formule en utilisant l’objet même qu’elle entend définir »
«a» est une chaîne :

• Exemple (déf. récursive d’une chaîne) un caractère ‘a’ suivi d’une chaîne vide
«ab» est une chaîne :
Une chaîne de caractère est : un caractère ‘a’ suivi de la chaîne « b »

– soit la chaîne vide La récursivité est un


– soit un caractère suivi d’une chaîne de caractère mécanisme puissant de définition d’objets!
23 24

4
13/03/2014

Récursivité Vs Itération Récursivité : applications


• Exemple 1 : calcul de la factorielle
Itération Récursivité Équations de récurrences :
procédure Itération( ) procédure Itération( ) – 0! = 1 (base)
Tantque (condition) faire Si (condition) alors – n! = n(n-1)! (récurrence)
<Instructions> <Instructions>
S(n-1) Itération() fonction fact(d n:entier): entier
fin tantque début
fin si
fonction S(n) : entier fonction S(n) : entier si n = 0
S :=0 Si (n=0) alors fact:= 1
Tant que (n>0) faire alors S:= 0 sinon fact:= n * fact(n-1)
S:=S+n sinon S:= +n fin si
n:=n-1 fin si fin
fin tant que
retourner S Que se passe t-il si n <0? récursivité infinie
25 26

Récursivité : applications Récursivité : applications


• Exemple 2 : suite de fibonacci • Exemple 2 (suite)
Équations de récurrences : Voyons l’exécution : u(9)?
– u(0) = 0, u(1) = 1 (Base) u(9)

u(8) u(7)
– u(n) = u(n-1)+u(n-2), n>1 (récurrence)
u(7) u(6) u(6) u(5)
fonction u(d n:entier) : entier
… … … …
si (n=0) ou (n=1)

alors u:= n ≈ O(2n-1) appels à la fonction u

sinon u:= u(n-1) + u(n-2) pour n = 100 , O(299) ≈ O(1033) !!!

Une solution récursive n’est pas toujours viable


fin si
...
27 28
fin action

Récursivité : applications Récursivité : applications


Les Tours de Hanoï (TH)
Exemple 2 (suite) : solution itérative
fonction u(d n:entier) : entier • 3 axes, n disques concentriques
début
var x, y, z, i : entier
si (n=0) ou (n=1) alors retourner n
sinon x:=0 {u(0)}
y:=1 {u(1)} n
pour i allant de 2 à n faire
z:= x+y {u(n) = u(n-1)+u(n-2)} G(auche) M(ilieu) D(roite)
x:=y
y:=z • But : déplacer tous les disques de G à D
fin pour • Règles :
retourner z – 1 seul disque peut être déplacé à la fois
fin si – 1 disque ne peut jamais être déposé sur un plus petit
29 30
fin – 1 disque ne peut être déposé que sur G, M ou D

5
13/03/2014

Récursivité : applications Récursivité : applications


TH : idée de la solution récursive
1 3
• exprimer le problème des n disques à l ’aide de la
même solution sur n-1 disques
2
• (base) savoir résoudre le problème pour 1 disque
G(auche) M(ilieu) D(roite)
Équations de récurrences (k=2)
(k=3) …, bonne chance
Récurrence :
Hypothèse: on connaît la solution de problème pour k disques
G(auche) M(ilieu) D(roite)
Trouver la solution pour k+1 disques
(k=1) 31 32

Récursivité: applications Récursivité: applications


algorithme hanoi(
hanoi(inout,output
inout,output);
);
var n :entier; { nombre de disques}
k procédure deplacer(n
deplacer(n : entier, G :char, M:char, D:char)
1(hypo) 3(hypo) debut
k+1
si (n=1)alors debutsi
ecrire("déplacer
ecrire("déplacer un disque de ") ;
G(auche) M(ilieu) 2 D(roite) ecrire(G,
ecrire(G, " vers ", D);
Solution finsi sinon debut
procédure déplacer(n, G, M, D) déplacer(n--1, G, D, M);
déplacer(n
« déplacer un disque de G vers D en utilisant l’axe M » ecrire("déplacer
ecrire("déplacer un disque de ") ;
(Base) n=1, déplacer un disque de G vers D ecrire(G,
ecrire(G, " vers ", D);
déplacer(n--1, M, G, D);
déplacer(n
(récurrence)
fin;
• déplacer(n
déplacer(n--1, G, D, M) debut
ecrire("Nb
ecrire("Nb disques? " ) ; lire(n);
• déplacer un disque de G vers D deplacer(n,
deplacer (n, ‘g’, ‘m’, ‘d’);
fin.
• déplacer(n
déplacer(n--1, M, G, D) 33 34

Récursivité

Conclusion

• La récursivité est un principe puissant nous


permettant de :
– définir des structures de données complexes

– de simplifier les algorithmes opérants sur ces


structures de données
35

Vous aimerez peut-être aussi