Académique Documents
Professionnel Documents
Culture Documents
Introduction
Comment choisir le meilleur algorithme?
o Exemples: Trier un tableau: algorithme de tri par insertion ou de tri
rapide?…, etc
On attend d’un algorithme qu’il résolve correctement et de
manière efficace le problème à résoudre, quelles que soient les
données à traiter.
o La correction: résout il bien le problème donné? Trouver une méthode
de résolution (exacte ou approchée) du problème.
o L’efficacité: en combien de temps et avec quelles ressources? Il est
souhaitable que nos solutions ne soient pas lentes, ne prennent pas de
l’espace mémoire considérable.
A. Naceur Algorithmique et structures de données 22
Exemple introductif
EXEMPLE: CALCUL DE LA VALEUR D’UN POLYNÔME
P0 Inter1
Pour i de 0 à n faire P 0
Notations:
f(n)
g(n)
n
n0
A. Naceur Algorithmique et structures de données 11
Notation de Landou
La notation de Landau « O » est celle qui est le plus
communément utilisée pour expliquer formellement les
performances d'un algorithme.
Cette notation exprime la limite supérieure d'une fonction dans
un facteur constant.
Le poids
A. Naceurde 3 n devient encore plus
2 grandetquand
Algorithmique structures n =100, soit 96,7%
de données 15
Onpeut négliger les quantités 10n et 10. Ceci explique les règles de la notation O
Les classes de complexité
Classe Notation O Exemple
Constante O(1) Accéder au premier élément d'un ensemble de données
15
A. Naceur Algorithmique et structures de données 17
Complexité des algorithmes
itératifs
Notation de Landou :
instruction simple
Pour les instructions simples qui ne font pas appel à un sous
programme comme l'affectation et les opérations de
lecture/écriture l'instruction prend un temps d'exécution fixe
(constant) dénoté O(1) : de l’ordre de 1
Une séquence d'instructions prend la "somme" des temps
d'exécution de chaque instruction dans la séquence.
Si chaque instruction est en O(1) alors la somme l'est aussi.
19
A. Naceur Algorithmique et structures de données
Notation de Landou :
instruction simple
Exemple : Permutation (var a: entier, var b: entier)
20
A. Naceur Algorithmique et structures de données
Notation de Landou : schémas
de choix
Pour les schémas de choix ou schémas décisionnels, on retiendra
la complexité maximale des différentes alternatives.
21
A. Naceur Algorithmique et structures de données
Notation de Landou : schémas
de choix
Exemple : Permutation (var a: entier, var b: entier)
retourner a C2
Sinon
Retourner b C3
22
A. Naceur Algorithmique et structures de données
Notation de Landou : schémas
itératifs
Hypothèse: le traitement à l’intérieur de la boucle est O(1)
Si le nombre d’itérations est constant alors la complexité est
O(1)
o Exemple: Parcours d'un intervalle constant 1..5 alors la
complexité est O(1)
FinFaire
Notation de Landou : schémas
itératifs
T = C1 + n -1 (C2+ C3+C4) + C5
= max (O(1), O(n-1)) = O(n-1) = O(n) linéaire
24
A. Naceur Algorithmique et structures de données
Notation de Landou : schémas
itératifs
2 boucles imbriquées (chacune à N itérations) avec des
instructions en O(1) : Complexité = O(N2)
3 boucles imbriquées (chacune à N itérations) avec des
instructions en O(1) : Complexité = O(N3)
M boucles imbriquées (chacune à N itérations) avec des
instructions en O(1) : Complexité = O(NM)
o Exemple:
Pour i = 1..N Faire
Pour j=1..N faire
opérations en O(1)
Fin Pour
Fin Pour
A. Naceur Algorithmique et structures de données
25
var 1
Tantque var <= N faire
…….
qqchose en O(1)
…….
var 2*var
FinFaire
15
Ici, la constante = 2 Algorithmique et structures de données
A. Naceur 26
Notation de Landou : boucles
multiplicatives
Puisque var est initialisé à 1, après k itérations la variable var
sera égale à 2k (car à la sortie de la 1ère itération var=2=21 puis à
la sortie de la 2ème itération var=4=22, à la sortie de la 3eme
itération var=8=23 etc.
Pour trouver la complexité temporelle il faut trouver k
Le nombre d'itérations k peut être trouvé en appliquant la fonction
logarithme des deux côtés de l'égalité
27
A. Naceur Algorithmique et structures de données
Notation de Landou : boucles
multiplicatives
var = 2k
log2(var) = log2 (2k)
N
= k log2(2)
= k Donc k = log2(var)
var = Facteurk
logFacteur(var) = logFacteur (Facteurk)
= k logFacteur (Facteur)
=k
Donc k = logFacteur (var)
var N
Tantque var > 1 Faire
……..
qqchose en O(1)
……..
var var/2
Fin tantque
30
A. Naceur Algorithmique et structures de données
Travail à faire (sol)
Puisque var est initialisé à N, après k itérations la variable var
sera égale à N/2K
Le nombre K peut être calculé comme suit: var = N/2K
log2(var) = log2 (N/2K)
= log2(N)-log2(2K)
= log2(N)-K*log2(2)
= log2(N)-K
Donc k = log2(N) - log2(var)
Puisque l'itération se termine quand var 1 log(var) est une
i 0 O(1)
Trouve faux O(1)
Tant que ((i<n) et (non trouve)) faire Condition = O(1);
nombre d’itération = n
2. Algorithme A2 T(n) = 6
4. Algorithme A4 :
Exécuter A3
27
A. Naceur Algorithmique et structures de données 33
Travail à faire
5. Algorithme A5 :
6. Algorithme A6
28
A. Naceur Algorithmique et structures de données 34
Travail à faire
Pour les fonctions de tris la mesure de complexité correspond au
nombre de comparaisons d’élément exprimé en fonction du
nombre d’élément à trier
Algo Tri par sélection
-- Précond: tab contient n valeurs, n > 1
-- Postcond: trie par sélection en ordre croissant des n valeurs de tab
pourtout i de 1 à n-1 faire
min i
pourtout j de i+1 à n faire
si tab[j] < tab[min] alors min j
Finsi finpour
échanger tab[i] et tab[min] 35
A. Naceur Algorithmique et structures de données
Finpour
Rappel
La somme des n premiers termes d’une suite géométrique de
premier terme u0 et de raison q 1 est:
n1
1 q n 1 raison nbre de termes
k 0
uk u 0
1 q
1er
terme
1 raison
La somme des n+1 premiers termes d’une suite arithmétique
de premier terme u0 et de raison r est:
n
(n 1)(u0 un )
uk
k 0 2
nbre termes de la somme (1er terme d er termes)
2
Le nième
A. Naceur
terme d’une suiteAlgorithmique
arithmétique de premier terme u0 et
et structures de données 36
de raison r est: un u0 n * r
Travail à faire : solution
La complexité temporelle = O(n2):
À chaque étape i du tri la comparaison est exécutée par la boucle la
plus interne n-i fois.
Il y a n-1 étapes (dans la boucle externe)
Étape 1: n-1 comparaisons
…
C’est une suite arithmétique dont le premier terme est 1, le dernier (n-
1) et la raison est de 1. Donc le nombre de comparaisons exécuté est :
n1
(n -1) (1 n 1) 2
n n
u k 2 2
k 1 37
A. Naceur Algorithmique et structures de données
Travail à faire : solution
La fonction (n2-n)/2 est un polynôme de degré 2 donc la
complexité temporelle est de l’ordre de O(n2)
38
A. Naceur Algorithmique et structures de données
Travail à faire
Calculer la complexité temporelle de la fonction de recherche
This image c annot currently be displayed.
Début
variable i : entier i 1;
Tantque ( i ≤ N et T[i] ≠ x) faire
i i+1
fin tantque
si (i>N)
retourner faux
sinon
retourner vrai
finsi
39
fin A. Naceur Algorithmique et structures de données
Travail à faire : solution
Complexité :
Il y a au plus N itérations (N est la taille des données)
La complexité est de N au pire des cas: O(N)
40
A. Naceur Algorithmique et structures de données
Travail à faire
Complexité temporelle de la recherche dichotomique
Recherche d’un élément dans un tableau de n éléments triés
Principe: diviser l’intervalle en 2 et tester sur l’élément du milieu si
ok arrêt sinon recherche à droite ou à gauche
41
A. Naceur Algorithmique et structures de données
Travail à faire : solution
Fonction RechercheDicho(Tab: tableau Entier, N : Entier, elem :
Entier): Entier
Début, Milieu, Fin : Entier Début
Début 1 O(1)
Fin N O(1)
Milieu € (Début + Fin) Div 2 O(1)
Tantque Début<=Fin et Tab[Milieu] ≠ elem Faire O(1)
Si Tab[milieu] < elem Alors
Début Milieu +1 O(1)
Sinon Fin Milieu – 1
Fin si
Milieu (Début + Fin) Div 2 O(1)
Fin TQ
Si Début > Fin Alors
RechercheDicho
A. Naceur -1 Sinon RecherDicho
Algorithmique Milieu
et structures de données O(1)
FinSi Fin
Travail à faire : solution
Supposons que N=2p (cad c’est un nombre qui s’écrit en puissance 2) alors
Numéro du test Nombre d’éléments dans l’intervalle
1er N
2 N/2
3 N/22
… …
p N/2p-1
p+1 N/2p arrêt car il reste un élément puisque N=2p donc N/2p = 2p / 2p =1