Académique Documents
Professionnel Documents
Culture Documents
AVANCEE
Bouchentouf Toumi
ENSAO
1
1
Exemple 1
n Variable N en Entier
n Ecrire un algorithme qui n Debut
demande un nombre compris n N←0
entre 10 et 20, jusqu’à ce que n Ecrire "Entrez un nombre entre 10 et 20 »
la réponse convienne. En cas n TantQue N < 10 ou N > 20 faire
de réponse supérieure à 20, • Lire N
on fera apparaître un message • Si N < 10 Alors Ecrire "Plus grand ! »
: « Plus petit ! », et • SinonSi N > 20 Alors
• Ecrire "Plus petit ! »
inversement, « Plus grand ! » • FinSi
si le nombre est inférieur à n FinTantQue
10. n Fin
2
Exemple 2 : Algorithme nombre base 2
n Nombres en base 2. Tout nombre n Algorithme Base2
entier s'écrit de façon unique sous n Variable a entier;
la forme d'une somme de
n Debut
puissances de 2 toutes différentes.
• tantque(a != 0) faire
n Par exemple 2007 s'écrit 2007 =
1024 + 512 + 256 + 128 + 64 + n ecrire(a%2);
16 + 4 + 2 + 1 n a = a/2;
n Soit 2007 = 210 + 29 + 28 + 27 • Fintantque
+ +26 + 24 + 22 + 21 + 20
n Fin
n On dit alors que l'écriture de 2007
en base 2 est 11111010111 plus
généralement l'écriture de n en
base 2 est égale à ckck−1 . . .
c2c1c0 si les nombres ci sont des 0
ou des 1
3
Histoire Bref de l’algorithme
- Machines de Turing
n Existe-t-il un algorithme qui étant donné
un énoncé logique permet de décider si ≈ formalisation
cet énoncé est vrai ou pas. minimaliste de la
n Gödel a démontré qu’il existe des notion
vérités mathématiques qu’on ne peut d’algorithme.
pas démontrer: théorème
d’incomplétude
n Alan Turing définit en 1934 un
- Thèse de Turing ou
processus précis qui est assez général Church-Turing :
pour représenter toute méthode bien toute notion
définie pour résoudre des problèmes de « raisonnable »
façon méthodique et automatisable. De
là est né le concept de la machine de
d’algorithme est
Turing. équivalente à la
notion de machine
de Turing.
4
Evaluation d’un algorithme
Taille n Opérations
élémentaires
6
Evaluation d’algorithmes
7
Evaluation des temps d’exécution
8
Opération élémentaire
9
Fonction de complexité
10
Hypothèses de simplification
11
Critères d’évaluation
n Pour une même taille de donnée, le nombre
d’opérations élémentaires exécutées reste variable.
n On propose alors plusieurs critères d’évaluation :
12
Ordre de grandeur
n Il reste fastidieux de compter toutes les opérations
élémentaires d’une exécution.
n 3 n + 15 est en O(n);
n n² + n + 250 est en O(n²);
n 2 n + n log2 n est en O(n log n);
n log2 n + 25 est en O(log2 n);
13
Ordre de grandeur
Complexité Tâche
O(1) Accès direct à un élément
n Le pire des cas pour cet algorithme correspond au cas où x n'est pas dans le
tableau T
n Si x n’est pas dans le tableau, on effectue 3N tests : on répète N fois les tests (i < N),
(Trouvé=Faux) et (T[i]=x)
n La complexité dans le pire des cas est d'ordre N, Notation de Landau (on note
O(N))
16
Exemple 1 : calculabilité des algorithmes
17
Exemple 2 : calculabilité des algorithmes
18
Définitions
n L'efficacité d'un algorithme est mesurée par
son coût (complexité) en temps et en
mémoire
n La complexité d'un algorithme est donc :
n en temps, le nombre d'opérations élémentaires
effectuées pour traiter une donnée de taille n ;
n en mémoire, l'espace mémoire nécessaire pour
traiter une donnée de taille n.
19
Définitions
n Un problème NP-complet est un problème pour lequel on
ne connaît pas d'algorithme correct efficace, c'est-à-
dire réalisable en temps et en mémoire.
n Le problème le plus célèbre est le problème du voyageur
de commerce.
n L'ensemble des problèmes NP-complets ont les propriétés
suivantes :
n si on trouve un algorithme efficace pour un problème NP
complet alors il existe des algorithmes efficaces pour
tous ;
n personne n'a jamais trouvé un algorithme efficace pour
un problème NP-complet ;
n Une heuristique est une procédure de calcul correcte
pour certaines instances du problème (c'est-à-dire se
termine ou produit une sortie correcte).
20
Exemple de complexité
nComplexité en n
nComplexité en 2n²
21
Efficacité
nSimuler une partie d’échec:
nTrop d’états à mettre en mémoire
nOn choisit des choses non-optimales mais efficaces
nVoyageur de commerce
nComment minimiser le trajet du voyageur de commerce
allant de villes en villes
• Enoncé simple, mais solution très difficile si
nombre de villes est grand (n! possibilités)
nN=5 =>120, n=15 => 1300 G
22
Récapitulatif :Temps d’exécution d’un algorithme
23
Revisions :
Voir les videos suivantes :
https://www.youtube.com/watch?v=cl
Z4q5zPBlE
Et
https://www.youtube.com/watch?v=e
xaHKrP6RsA
Exemple : Calcul de la valeur d’un polynôme
27
Exemple : Calcul de la valeur d’un polynôme
P(x) = (….(((anx+an-1)x+an-2)x+an-3)…..)x+a0
début
P = an
Pour i de n-1 à 0 (pas = –1) faire Coût de
P = P*X + ai l’algorithme :
finpour Fin -n additions
-n multiplications
v Notations:
29
NOTATION DE LANDAU
O(T1)O(T2) = O(T1T2)
31
NOTATION DE LANDAU
v Supposant que le temps d'exécution d’un algorithme est décrit par la fonction
T(n) = 3n2+10n+10, Calculer O(T(n))?
32
CLASSES DE COMPLEXITÉ
Classe Notation O Exemple
Constante O(1) Accéder au premier élément d'un ensemble de données
33
CLASSES DE COMPLEXITÉ
14
34
CALCUL DE LA COMPLEXITÉ
1. Cas d'une instruction simple (écriture, lecture, affectation ) :
Le temps d'exécution de chaque instruction simple est O(1).
1. Cas d'une suite d'instructions simples: Le temps d ’exécution
d'une séquence d'instruction est déterminée par la règle de la
somme. C'est donc le temps de la séquence qui a le plus grand
temps d ’exécution: O(T) = O (T1 + T2) = max(O(T1);O(T2)) .
35
CALCUL DE LA COMPLEXITÉ
v Exemple 2:
36
CALCUL DE LA COMPLEXITÉ
3. Cas d'un traitement conditionnel:
Le temps d'exécution d'une instruction SI est le temps d ’exécution des
instructions exécutées sous condition, plus le temps pour évaluer la
condition. Pour une alternative, on se place dans le cas le plus
défavorable.
37
CALCUL DE LA COMPLEXITÉ
4. Cas d'un traitement itératif :
Le temps d ’exécution d'une boucle est la somme du temps pour évaluer le
corps et du temps pour évaluer la condition.
Remarque : Souvent ce temps est le produit du nombre d'itérations de la
boucle par le plus grand temps possible pour une exécution du corps.
38
CALCUL DE LA COMPLEXITÉ
v Exemple 2:
Recherche séquentielle (S: tableau [0..n-1] d’entier, x: entier): booléen
iß 0 O(1)
Trouve ß faux O(1)
Tant que ((i<n) et (non trouve)) faire Condition = O(1);
nombre d’itération = n
Si (S[i] = x) alors
Trouve ß vrai
iß i + 1
FinTantQue
Retourner trouve
39
Complexité du Tri par Insertion
pExemple 1 : Tri par insertion
n Principe : Cette méthode de tri s'apparente à celle
utilisée pour trier ses cartes dans un jeu : on
prend une carte, tab[1], puis la deuxième, tab[2],
que l'on place en fonction de la première, ensuite
la troisième tab[3] que l'on insère à sa place en
fonction des deux premières et ainsi de suite.
n Le principe général est donc de considérer que les
(i-1) premières cartes, tab[1],..., tab[i-1] sont
triées et de placer la ie carte, tab[i], à sa place
parmi les
(i-1) déjà triées, et ce jusqu'à ce que i = N.
40
Complexité du Tri par Insertion
pExemple 1 : Tri par insertion
Procédure tri_Insertion (var tab : tableau entier [N])
i, j :entier ; x: entier ;
Pour i de 2 à N faire
x← tab[i];
k ← i - 1;
Tant que j > 0 ET tab[j] > x faire
tab[j+1] ← tab[j];
j ← j - 1;
Fin Tant que
tab[j+1] ← x;
Fin pour
Fin
41
Complexité du Tri par Insertion
pExemple 1 : Tri par insertion
Faire la trace pour
T = [3,1,4,0,5], U = [0,3,4,6,9] et V = [9,6,4,3,0]
42
Complexité du Tri par Insertion
Trace de insert(T)
- - - - 31405
2 1 1 oui
0 non 13405
3 4 2 non
4 0 3 oui
2 oui 13045
1 oui 10345
0 non 01345
5 5 4 non 01345
43
Trace de insert(U) et insert(V)
i x j U i x j V
- - - 0 3 46 9 - - - 9 6 43 0
2 3 1 2 6 1
3 4 2 0 6 9 4 30
4 6 3 3 4 2
5 9 4 1 6 4 93 0
0 4 6 93 0
4 3 3
2 4 6 39 0
1 4 3 69 0
0 3 4 69 0
5 0 4
3 3 4 60 9
2 3 4 06 9
1 3 0 46 9
0 0 3 46 9 44
Complexité du Tri par Insertion
Exemple 1 : Tri par insertion
pCalcul de la complexité:
n la taille du tableau à trier est n.
n On a deux bouclesimbriquées :
pLa première indique l'élément suivant à insérer dans
la partie triée du tableau.
pElle effectuera n - 1 itérations puisque le premier
élément est déjà trié.
pPour chaque élément donné par la première boucle,
on fait un parcourt dans la partie triée pour
déterminer son emplacement.
45
Complexité du Tri par Insertion
Exemple 1 : Tri par insertion
pCalcul de la complexité:
n Au meilleur des cas : le cas le plus favorable
pour cet algorithme est quand le tableau est
déjà trié (de taille n) è O(n)
n Au pire des cas : Le cas le plus défavorable
pour cet algorithme est quand le tableau est
inversement trié è on fera une itération pour
le 1er élément, deux itérations pour le 2ème et
ainsi de suite pour les autres éléments.
Soit 1+2+3+4+…+(n-1) = n(n +1) - n
2
è sa complexité O(n ) 2
46
Complexité du Tri par Insertion
Exemple 1 : Tri par insertion
pCalcul de la complexité:
n En moyenne des cas : En moyenne, la moitié
des éléments du tableau sont triés, et sur
l’autre moitié ils sont inversement triés.
è O(n2)
47
Complexité du Tri par sélection
pPrincipe :
p Le principe est que pour classer n valeurs, il faut
rechercher la plus petite valeur (resp. la plus
grande) et la placer au début du tableau (resp.
à la fin du tableau),
p puis la plus petite (resp. plus grande) valeur
dans les valeurs restantes et la placer à la
deuxième position (resp. en avant dernière
position) et ainsi de suite...
Complexité du Tri par sélection
Procédure select (T[1..n])
pour i ← 1 jusqu'à n-1 faire
minj ← i,
minx ← T[i]
pour j ← i + 1 jusqu'à n faire
si T[j] < minx alors
minj ← j
minx ← T[j]
FinSi
T[minj] ← T[i]
T[i] ← minx
FinPour
FinPour
52
Complexité du Tri par propagation / à bulles
p Principe :
p Il consiste à parcourir le tableau tab en permutant
toute paire d'éléments consécutifs
(tab[k],tab[k+1]) non ordonnés - ce qui est un
échange et nécessite donc encore une variable
intermédiaire de type entier.
p Après le premier parcours, le plus grand élément
se retrouve dans la dernière case du tableau, en
tab[N], et il reste donc à appliquer la même
procédure sur le tableau composé des éléments
tab[1], ..., tab[N-1].
53
Complexité du Tri par propagation / à bulles
pAlgorithme :
Procédure tri_Bulle (tab : tableau entier [N] ) i,
k :entier ;tmp : entier ;
Pour i de N à 2 faire
Pour k de 1 à i-1 faire
Si (tab[k] > tab[k+1]) alors
tmp ← tab[k];
tab[k] ← tab[k+1];
tab[k+1] ← tmp;
Fin si
è T(n) = O(n²)
Fin pour
Fin pour 54