Chap1 ESEN
Chap1 ESEN
1
Introduction Qu’est ce que l’algorithmique?
Données Obtention de
structurées résultats
Traitement
2
Introduction du raisonnement à l’algorithme au code
Savoir résoudre un problème est une chose, le résoudre efficacement en est une autre!
6
3
Introduction Efficacité
7
Théorie de la complexité Définition et Objectifs
Elle permet:
4
Théorie de la complexité Evaluation de la rapidité d’un algorithme
Ces mesures ne seraient pas pertinentes car le même algorithme sera plus
rapide sur une machine plus puissante.
Au besoin, on pourra alors adapter ces quantités en fonction de la machine sur
laquelle l’algorithme s’exécute.
9
Théorie de la complexité Calcul du temps d’exécution
Règles:
• Chaque instruction basique consomme une unité de temps (affectation d’une
variable, lecture, écriture, comparaison,…).
10
5
Théorie de la complexité Calcul du temps d’exécution
11
Théorie de la complexité Calcul du temps d’exécution
12
6
Théorie de la complexité Calcul du temps d’exécution
Problèmes
Unités de temps abstraites:
Dépends des données.
Dépend de la nature des données: on ne sait pas toujours combien de fois
exactement on va exécuter une boucle.
De même lors d’un branchement conditionnel, le nombre de comparaisons
effectués n’est pas toujours le même.
Temps exacte:
Dépend de la puissance de la machine.
Dépend de la nature des données (variables): si on change les données, le temps
change.
Solution
Calcul de la complexité algorithmique
13
Complexité algorithmique Définition
Complexité au pire
C’est le plus grand nombre d’opérations qu’aura à exécuter l’algorithme
sur un jeu de données de taille n.
Complexité en moyenne
C’est la moyenne des complexités de l’algorithme sur des jeux de données
de taille n.
14
7
Complexité algorithmique Définition générale
asymptotique ?
on s’intéresse à des données très grandes parce que les petites valeurs ne
sont pas assez informatives.
15
Complexité algorithmique 0-notation (Notation de Landau)
8
Complexité algorithmique 0-notation (Notation de Landau)
f(n) et en O(g(n))s’il existe un seuil à partir duquel la fonction f(.) est toujours
dominée par g(.), à une constante multiplicative fixée près.
18
9
Complexité algorithmique 0-notation (Notation de Landau)
19
Complexité algorithmique Exemples de calcul de 0(.)
20
10
Complexité algorithmique Exemples de calcul de 0(.)
c=7 et n0 =1
21
Complexité algorithmique Exemples de calcul de 0(.)
Donc est en
22
11
Complexité algorithmique Exemples de calcul de 0(.)
23
Complexité algorithmique Règles de calcul
• On a donc la complexité de
24
12
Complexité algorithmique Règles de calcul
25
Complexité algorithmique Règles de calcul
Exemple:
Supposons que le temps d’exécution d’un algorithme est décrit par la fonction:
calculer O(T(n))?
Remarque:
Pour n=10, nous avons:
Le poids de devient encore plus grand pour n=100, soit 96,7%, on peut donc négliger les
quantités10n et 10. 26
Ceci explique les règles de notation O.
13
Complexité algorithmique Calcul de complexité
Cas d’une branche conditionnelle: le temps d’exécution est déterminé aussi par
la règle de la somme.
27
Complexité algorithmique Calcul de complexité
28
14
Complexité algorithmique Calcul de complexité
Les classes de complexité les plus fréquentes (par ordre croissant selon O(.) )
30
15
Complexité algorithmique Classes de complexité
31
Complexité algorithmique Classes de complexité
32
16
Application Algorithmes de recherche
Recherche séquentielle
Principe:
Le principe consiste à parcourir un tableau d'éléments dans l'ordre de
ses indices jusqu'à ce qu'un élément recherché soit trouvé ou bien
que la fin du tableau soit atteinte et l’élément recherché est alors
inexistant.
Exemple:
Soit T un tableau contenant les10 éléments suivants:
17
Application Algorithmes de recherche
Recherche séquentielle
Calcul de complexité:
Fonction Recherche_séquentielle (x:entier,T:tab, n:entier) : booleen
Var i: entier
trouve: booleen
Début
i←0
trouve ← faux
Tant que ((i<n) et (non trouve)) faire
i ← i +1
si (T[i] = x) alors
trouve ← vrai
finsi
fintq
Retourner (trouve)
Fin 35
Application Algorithmes de recherche
Recherche dichotomique
Principe:
On veut chercher un élément dans un tableau trié dans le sens croissant.
Le but de cette recherche est de diviser l’intervalle de recherche par 2 à chaque itération.
Pour cela, on procède de la façon suivante:
Soient premier et dernier les extrémités gauche et droite de l’intervalle dans lequel on cherche
la valeur x, on calcule m, l’indice de l’élément médian:
m=(premier + dernier ) div 2
36
18
Application Algorithmes de recherche
Recherche dichotomique
Principe:
Il y a 3 cas possibles:
• X<T[m], l’élément x s’il existe, il se trouve dans l’intervalle [premier... m-1]
• x > T[m], l’élément de valeur x, s’il existe, se trouve dans l’intervalle [m+1... Dernier]
•X=T[m], x est trouvé, la recherche est terminée
La recherche dichotomique consiste à itérer ce processus jusqu’à ce que l’on trouve x ou
que l‘intervalle de recherche soit vide.
Exemple:
Soit T un tableau contenant les10 éléments suivants:
19
Application Algorithmes de recherche
Recherche dichotomique
Calcul de complexité:
Supposant que le tableau est de taille n une puissance de 2, .
Le pire des cas pour la recherche d’un élément est de continuer à diviser jusqu’à obtenir
un tableau de taille 1.
q est le nombre d’itérations nécessaires pour aboutir à un tableau de taille 1.
39
Application Algorithmes de recherche
20
Algorithmes de tri Tri à bulles
Tri à bulles
Principe:
Elle consiste à répéter le traitement suivant: parcourir les éléments du tableau de 1 à (n-1): si
l’élément i est supérieur à l’élément (i+1) alors, on les permute.
Le programme s’arrête lorsqu’aucune permutation n’est réalisable après le parcours complet
du tableau.
Exemple:
41
Algorithmes de tri Tri à bulles
Tri à bulles
Algorithme: Procédure Tri_à_bulles (T:tab, n:entier)
Var echange: booléen
i: entier
Début
répéter
echange ←faux
pour i de 1 à n-1 faire
si T[i] > T[i+1] alors
x ← T[i]
T[i] ← T[i+1]
T[i+1] ← x
echange ← vrai
finsi
fin pour
jusqu’à (echange = faux) 42
Fin
21
Algorithmes de tri Tri à bulles
Tri à bulles
Calcul de complexité : Procédure Tri_à_bulles (T:tab, n:entier)
Var echange: booléen
x,i: entier
Début
répéter
echange ←faux
pour i de 1 à n-1 faire
si (T[i] > T[i+1]) alors
x ← T[i]
T[i] ← T[i+1]
T[i+1] ← x
echange ← vrai
finsi
fin pour
jusqu’à (echange = faux) 43
Fin
Algorithmes de tri Tri par sélection
Tri par sélection
Principe:
Elle consiste à chercher l’indice du plus petit nombre du tableau (de 1 à n) et le permuter avec
l’élément 1 du tableau, chercher ensuite le plus petit nombre (de 2 à n) et le permuter avec
l’élément 2 du tableau, répéter ce traitement jusqu’à arriver à l’élément n-1.
Exemple:
44
22
Algorithmes de tri Tri par sélection
Tri par sélection
Algorithme: Procédure Tri_par_sélection (T:tab, n:entier)
Var i, j, x, indmin: entier
Début
pour i de 1 à n-1 faire
indmin ← i
pour j de i+1 à n faire
si T[j] < T[indmin] alors
indmin ← j
finsi
finpour
x ← T[i]
T[i] ←T[indmin]
T[indmin] ← x
fin pour
Fin 45
Algorithmes de tri Tri par sélection
Tri par sélection
Calcul de complexité: Procédure Tri_par_sélection (T:tab, n:entier)
Var i, j, x, indmin: entier
Début
pour i de 1 à n-1 faire
indmin ← i
pour j de i+1 à n faire
si T[j] < T[indmin] alors nbres d’itérations
indmin ← j (n-1)
finsi
finpour
x ← T[i]
T[i] ←T[indmin]
T[indmin] ← x
fin pour
Fin 46
23
Outline
Introduction
Théorie de la complexité
Complexité algorithmique
Application: algorithmes de recherche (séquentielle et
dichotomique)
Application: algorithmes de tri (à bulles et sélection)
1
Introduction Qu’est ce que l’algorithmique?
Données Obtention de
structurées résultats
Traitement
2
Introduction du raisonnement à l’algorithme au code
Savoir résoudre un problème est une chose, le résoudre efficacement en est une autre!
6
3
Introduction Efficacité
7
Théorie de la complexité Définition et Objectifs
Elle permet:
4
Théorie de la complexité Evaluation de la rapidité d’un algorithme
Ces mesures ne seraient pas pertinentes car le même algorithme sera plus
rapide sur une machine plus puissante.
Au besoin, on pourra alors adapter ces quantités en fonction de la machine sur
laquelle l’algorithme s’exécute.
9
Théorie de la complexité Calcul du temps d’exécution
Règles:
• Chaque instruction basique consomme une unité de temps (affectation d’une
variable, lecture, écriture, comparaison,…).
10
5
Théorie de la complexité Calcul du temps d’exécution
11
Théorie de la complexité Calcul du temps d’exécution
12
6
Théorie de la complexité Calcul du temps d’exécution
Problèmes
Unités de temps abstraites:
Dépends des données.
Dépend de la nature des données: on ne sait pas toujours combien de fois
exactement on va exécuter une boucle.
De même lors d’un branchement conditionnel, le nombre de comparaisons
effectués n’est pas toujours le même.
Temps exacte:
Dépend de la puissance de la machine.
Dépend de la nature des données (variables): si on change les données, le temps
change.
Solution
Calcul de la complexité algorithmique
13
Complexité algorithmique Définition
Complexité au pire
C’est le plus grand nombre d’opérations qu’aura à exécuter l’algorithme
sur un jeu de données de taille n.
Complexité en moyenne
C’est la moyenne des complexités de l’algorithme sur des jeux de données
de taille n.
14
7
Complexité algorithmique Définition générale
asymptotique ?
on s’intéresse à des données très grandes parce que les petites valeurs ne
sont pas assez informatives.
15
Complexité algorithmique 0-notation (Notation de Landau)
8
Complexité algorithmique 0-notation (Notation de Landau)
f(n) et en O(g(n))s’il existe un seuil à partir duquel la fonction f(.) est toujours
dominée par g(.), à une constante multiplicative fixée près.
18
9
Complexité algorithmique 0-notation (Notation de Landau)
19
Complexité algorithmique Exemples de calcul de 0(.)
20
10
Complexité algorithmique Exemples de calcul de 0(.)
c=7 et n0 =1
21
Complexité algorithmique Exemples de calcul de 0(.)
Donc est en
22
11
Complexité algorithmique Exemples de calcul de 0(.)
23
Complexité algorithmique Règles de calcul
• On a donc la complexité de
24
12
Complexité algorithmique Règles de calcul
25
Complexité algorithmique Règles de calcul
Exemple:
Supposons que le temps d’exécution d’un algorithme est décrit par la fonction:
calculer O(T(n))?
Remarque:
Pour n=10, nous avons:
Le poids de devient encore plus grand pour n=100, soit 96,7%, on peut donc négliger les
quantités10n et 10. 26
Ceci explique les règles de notation O.
13
Complexité algorithmique Calcul de complexité
Cas d’une branche conditionnelle: le temps d’exécution est déterminé aussi par
la règle de la somme.
27
Complexité algorithmique Calcul de complexité
28
14
Complexité algorithmique Calcul de complexité
Les classes de complexité les plus fréquentes (par ordre croissant selon O(.) )
30
15
Complexité algorithmique Classes de complexité
31
Complexité algorithmique Classes de complexité
32
16
Application Algorithmes de recherche
Recherche séquentielle
Principe:
Le principe consiste à parcourir un tableau d'éléments dans l'ordre de
ses indices jusqu'à ce qu'un élément recherché soit trouvé ou bien
que la fin du tableau soit atteinte et l’élément recherché est alors
inexistant.
Exemple:
Soit T un tableau contenant les10 éléments suivants:
17
Application Algorithmes de recherche
Recherche séquentielle
Calcul de complexité:
Fonction Recherche_séquentielle (x:entier,T:tab, n:entier) : booleen
Var i: entier
trouve: booleen
Début
i←0
trouve ← faux
Tant que ((i<n) et (non trouve)) faire
i ← i +1
si (T[i] = x) alors
trouve ← vrai
finsi
fintq
Retourner (trouve)
Fin 35
Application Algorithmes de recherche
Recherche dichotomique
Principe:
On veut chercher un élément dans un tableau trié dans le sens croissant.
Le but de cette recherche est de diviser l’intervalle de recherche par 2 à chaque itération.
Pour cela, on procède de la façon suivante:
Soient premier et dernier les extrémités gauche et droite de l’intervalle dans lequel on cherche
la valeur x, on calcule m, l’indice de l’élément médian:
m=(premier + dernier ) div 2
36
18
Application Algorithmes de recherche
Recherche dichotomique
Principe:
Il y a 3 cas possibles:
• X<T[m], l’élément x s’il existe, il se trouve dans l’intervalle [premier... m-1]
• x > T[m], l’élément de valeur x, s’il existe, se trouve dans l’intervalle [m+1... Dernier]
•X=T[m], x est trouvé, la recherche est terminée
La recherche dichotomique consiste à itérer ce processus jusqu’à ce que l’on trouve x ou
que l‘intervalle de recherche soit vide.
Exemple:
Soit T un tableau contenant les10 éléments suivants:
19
Application Algorithmes de recherche
Recherche dichotomique
Calcul de complexité:
Supposant que le tableau est de taille n une puissance de 2, .
Le pire des cas pour la recherche d’un élément est de continuer à diviser jusqu’à obtenir
un tableau de taille 1.
q est le nombre d’itérations nécessaires pour aboutir à un tableau de taille 1.
39
Application Algorithmes de recherche
20
Algorithmes de tri Tri à bulles
Tri à bulles
Principe:
Elle consiste à répéter le traitement suivant: parcourir les éléments du tableau de 1 à (n-1): si
l’élément i est supérieur à l’élément (i+1) alors, on les permute.
Le programme s’arrête lorsqu’aucune permutation n’est réalisable après le parcours complet
du tableau.
Exemple:
41
Algorithmes de tri Tri à bulles
Tri à bulles
Algorithme: Procédure Tri_à_bulles (T:tab, n:entier)
Var echange: booléen
i: entier
Début
répéter
echange ←faux
pour i de 1 à n-1 faire
si T[i] > T[i+1] alors
x ← T[i]
T[i] ← T[i+1]
T[i+1] ← x
echange ← vrai
finsi
fin pour
jusqu’à (echange = faux) 42
Fin
21
Algorithmes de tri Tri à bulles
Tri à bulles
Calcul de complexité : Procédure Tri_à_bulles (T:tab, n:entier)
Var echange: booléen
x,i: entier
Début
répéter
echange ←faux
pour i de 1 à n-1 faire
si (T[i] > T[i+1]) alors
x ← T[i]
T[i] ← T[i+1]
T[i+1] ← x
echange ← vrai
finsi
fin pour
jusqu’à (echange = faux) 43
Fin
Algorithmes de tri Tri par sélection
Tri par sélection
Principe:
Elle consiste à chercher l’indice du plus petit nombre du tableau (de 1 à n) et le permuter avec
l’élément 1 du tableau, chercher ensuite le plus petit nombre (de 2 à n) et le permuter avec
l’élément 2 du tableau, répéter ce traitement jusqu’à arriver à l’élément n-1.
Exemple:
44
22
Algorithmes de tri Tri par sélection
Tri par sélection
Algorithme: Procédure Tri_par_sélection (T:tab, n:entier)
Var i, j, x, indmin: entier
Début
pour i de 1 à n-1 faire
indmin ← i
pour j de i+1 à n faire
si T[j] < T[indmin] alors
indmin ← j
finsi
finpour
x ← T[i]
T[i] ←T[indmin]
T[indmin] ← x
fin pour
Fin 45
Algorithmes de tri Tri par sélection
Tri par sélection
Calcul de complexité: Procédure Tri_par_sélection (T:tab, n:entier)
Var i, j, x, indmin: entier
Début
pour i de 1 à n-1 faire
indmin ← i
pour j de i+1 à n faire
si T[j] < T[indmin] alors nbres d’itérations
indmin ← j (n-1)
finsi
finpour
x ← T[i]
T[i] ←T[indmin]
T[indmin] ← x
fin pour
Fin 46
23