Analyse Et Conception Des Algorithmes
Analyse Et Conception Des Algorithmes
1. Introduction
2. Les tableaux et le tri
3. Les algorithmes de tri élémentaires
4. Les algorithmes de tri avancés
5. Les algorithmes de recherche
6. Les arbres et les arbres binaires
7. Les graphes et ses algorithmes
Structures de données:
Notion d’algorithme:
Un algorithme est la composition d’un ensemble fini d’étapes dont chacune est:
• Définie de façon rigoureuse;
• Définie de façon non ambiguë;
• Effective (pouvant être réalisée en un temps fini).
Exercice d’application:
def somme(n):
som = 0
for i in range(1,n+1):
som = som + i
print(i,':',som-i,"+",i,'=',som)
return(som)
Critères mathématiques:
Critères mathématiques:
Complexité et récursivité:
Définition:
Définition:
• Les éléments suivants peuvent être utilisés pour représenter des tableaux en
Python:
• En utilisant des listes
• Via le module de array
• Avec le module NumPy
Remarque: Nous pouvons traiter les listes comme des tableaux. Cependant, le
type d’éléments stockés est complètement différent.
Le tri:
Solution:
Types de tri
• Tri interne : tri en mémoire centrale. Tris externes : données sur un disque
externe.
• Tri générique : peut trier n’importe quel type d’objets pour autant qu’on
puisse comparer ces objets.
Types de tri
• Tri stable : conserve l’ordre relatif des éléments égaux (au sens de la
méthode de comparaison).
Tri sélection:
Tri sélection:
2 1 5 0 9 4
0 1 5 2 9 4
0 1 5 2 9 4
0 1 2 5 9 4
0 1 2 4 9 5
0 1 2 4 5 9
0 1 2 4 5 9
• Nombre d’itérations : n - 1
• A chaque itération :
Recherche du minimum : n − T (T taille courante)
Mettre l’élément à sa place : 3
• Complexité : O(n2)
Tri insertion:
Tri insertion:
7 4 3 1 9 2 5
4 7 3 1 9 2 5
3 4 7 1 9 2 5
1 3 4 7 9 2 5
1 3 4 7 9 2 5
1 2 3 4 7 9 5
1 2 3 4 5 7 9
Dans le pire cas ou en moyenne, la complexité du tri par sélection est en O(n2)
• Les éléments de la partie triée sont inférieurs aux éléments de la partie non
triée.
4 7 3 1 9 2 5 3 4 1 7 2 5 9 1 3 4 2 5 7 9
4 3 7 1 9 2 5 3 1 4 7 2 5 9 1 3 4 2 5 7 9
4 3 1 7 9 2 5 3 1 4 7 2 5 9 1 3 2 4 5 7 9
4 3 1 7 9 2 5 3 1 4 2 7 5 9 1 3 2 4 5 7 9
4 3 1 7 2 9 5 3 1 4 2 5 7 9 1 3 2 4 5 7 9
4 3 1 7 2 5 9 3 1 4 2 5 7 9
4 3 1 7 2 5 9
Fin
Le diviser pour régner est une méthode algorithmique basée sur le principe
suivant :
Remarque: Les algorithmes basés sur le paradigme "diviser pour régner" sont
très souvent des algorithmes récursifs.
Tri fusion :
Le tri fusion consiste à décomposer une liste en deux sous-listes chacune deux
fois plus petites, de les trier séparément, puis de fusionner les résultats en une
liste triée.
• 1er algo de tri fusion écrit par Von Neumann pour l’EDVAC en 1945.
• Basé sur le paradigme « Diviser pour Régner ».
7 4 3 1 9 2 5 Fusion
7 4 3 1 9 2 5
7 4 3 1 9 2
4 7 1 3 2 9
1 3 4 7 2 5 9
1 2 3 4 5 7 9
Algorithme Trifusion.
Entrée : T liste de n nombres.
Sortie : Eléments de T ordonnés par ordre croissant
Début
Si n ≤ 1 alors
retourner L
Sinon
L1 <- L[début….milieu]
L2 <- L[milieu…fin]
retourner fusionner(trifusion(L 1),trifusion(L 2))
finsi
Fin
1 3 4 7 2 5 9 1
1 3 4 7 2 5 9 1 2
1 3 4 7 2 5 9 1 2 3
1 3 4 7 2 5 9 1 2 3 4
1 3 4 7 2 5 9 1 2 3 4 5
1 3 4 7 2 5 9 1 2 3 4 5 7
1 3 4 7 2 5 9 1 2 3 4 5 7 9
Dans le pire cas ou en moyenne, la complexité du tri à bulle est en O(n log2 n).
Algorithme Trirapid.
Entrée : T liste de n nombres, début et fin des entiers
Sortie : Eléments de T ordonnés par ordre croissant
Début
Si n ≤ 1 alors
retourner L
Sinon
Indice_pivot = partitionnement(T, début,fin)
Trirapid(T, début, indice_pivot-1)
Trirapid(T, indice_pivot+1, fin)
finsi
Fin
Dans le pire cas, la complexité du tri rapide est en O(n2). Mais en moyenne, elle
est en O(n log(n)).
• Un tri par comparaison est un tri dans lequel on compare une paire
d’éléments.
Le tri linéaire est un tri qui opère uniquement sur des listes de valeurs entières
avec une faible dispersion.
Un des algorithmes de tri le plus rapide, et pourtant il est loin d'être compliqué.
Tri linéaire :
3 6 4 1 3 4 1 4 0 0 0 0 0 0 0 3 6 4 1 3 4 1 4 0 1 0 2 2 0 1
0 1 2 3 4 5 6 0 1 2 3 4 5 6
3 6 4 1 3 4 1 4 0 0 0 1 0 0 0 3 6 4 1 3 4 1 4 0 2 0 2 2 0 1
0 1 2 3 4 5 6 0 1 2 3 4 5 6
3 6 4 1 3 4 1 4 0 0 0 1 0 0 1 3 6 4 1 3 4 1 4 0 2 0 2 3 0 1
0 1 2 3 4 5 6
3 6 4 1 3 4 1 4 0 0 0 1 1 0 1
0 1 2 3 4 5 6
3 6 4 1 3 4 1 4 0 1 0 1 1 0 1
0 1 2 3 4 5 6
3 6 4 1 3 4 1 4 0 1 0 2 1 0 1
0 2 0 2 3 0 1 0 2 0 2 3 0 1 1 1 3 3 4 4 4
0 1 2 3 4 5 6 0 1 2 3 4 5 6
0 2 0 2 3 0 1 0 2 0 2 3 0 1 1 1 3 3 4 4 4 6
0 1 2 3 4 5 6
0 2 0 2 3 0 1 1 1
0 1 2 3 4 5 6
0 2 0 2 3 0 1 1 1
0 1 2 3 4 5 6
0 2 0 2 3 0 1 1 1 3 3
0 1 2 3 4 5 6
0 2 0 2 3 0 1 1 1 3 3 4 4 4
Algorithme Trilinéaire.
Entrée : T liste de n nombres
Sortie : R contenant les éléments de T ordonnés par ordre croissant
Début
pour i de 0 à m − 1 // ini alisa on
nb[i] <- 0
pour i de 0 à n // calcul des nombres d’apparitions
nb[T[i]] <- nb[T[i]] + 1,
• La complexité finale de notre algorithme est donc O(n + m), soit une
complexité en temps linéaire.
Autres tris:
• Tri cocktail
• Tri par tas
• Smoothsort
• Tri de Shell
• Tri à peigne
Récapitulatif:
La recherche séquentielle:
Complexité : O(n)
Ecrire une fonction existe_deux(chaine, lettre) qui permet de tester si une lettre
apparaît deux fois dans une chaine.
La recherche dichotomique:
Remarques :
- Ça ne peut marcher que si le tableau est trié
- On coupe le tableau en deux parties pas forcément égales en taille
Mohammed KASRI Analyse et conception des algorithmes ENSIASD - TAROUDANT 67
Les algorithmes de recherche
1 2 3 4 5 6 7 8 9 10
6 7 8 9 10
6 7
6 7
Supposons que nous ayons le tableau : (1, 3, 7, 8, 11, 15, 17, 18, 21), et que nous voulions
trouver X = 18.
1. Initialiser lo = 0 , mid= -1 et hi = 8.
2. Calculer mid utilisant la formule : 0 + (18 - 1)*(8 - 0)//(21-1) = 6.
3. Ensuite, nous comparons A[6] avec X pour voir qu’il est plus petit et nous fixons lo comme
7.
5. Ensuite, on compare A[7] avec X pour voir qu’il est égal à 18 et on obtient l’indice 7.
Introduction
Structure de données:
3 7 0 9
Définition
• Contient 0 ou N nœuds
• Déplacement entre les nœuds se fait dans un seul sans
• Chaque nœud peut avoir 0 ou N successeurs
• Chaque nœud a 0 ou 1 prédécesseur
Exercice d’application
1 2 3 4 5 6
Applications
Terminologie
Nœuds
1
2 3 4
5 6 7 8 9
10 11 12
Terminologie
Nœuds
1
Racine (root)
2 3 4
5 6 7 8 9
10 11 12
Terminologie
Nœuds
1
Racine (root)
Parent
2 3 4
5 6 7 8 9
10 11 12
Terminologie
Nœuds
1
Racine (root)
Parent
Files 2 3 4
5 6 7 8 9
10 11 12
Terminologie
Nœuds
1
Racine (root)
Parent
Files 2 3 4
Feuille (descendant)
5 6 7 8 9
10 11 12
Terminologie
Nœuds
1
Racine (root)
Parent
Files 2 3 4
Feuille (descendant)
Frères 5 6 7 8 9
10 11 12
Terminologie
Nœuds
1
Racine (root)
Parent
Files 2 3 4
Feuille (descendant)
Frères 5 6 7 8 9
10 11 12
Terminologie
Nœuds
1
Racine (root)
Parent
Files 2 3 4
Feuille (descendant)
Frères 5 6 7 8 9
Ancêtres
10 11 12
Terminologie
Nœuds
1
Racine (root)
Parent
Files 2 3 4
Feuille (descendant)
Frères 5 6 7 8 9
Ancêtres
Branches (Nb branches = Nb nœuds - 1) 11 12
10
Terminologie
Nœuds
1
Racine (root)
Parent
Files 2 3 4
Feuille (descendant)
Frères 5 6 7 8 9
Ancêtres
Branches (Nb branches = Nb nœuds - 1) 11 12
10
Sous-arbre
Terminologie
Profondeur:
1
Niveau 0
Niveau 1 2 3 4
5 6 7 8 9
Niveau 2
10 11 12
Niveau 3
Terminologie
Profondeur:
1
La profondeur d’un nœud (niveau d’un nœud ) et le nombre de
branches que je dois parcourir pour da la racine pour arriver à ce
nœud. 2 3 4
Exemple: 5 6 7 8 9
Profondeur de nœud étiqueté 7=2
Profondeur de nœud étiqueté 10=3 11 12
10
Terminologie
Profondeur (hauteur):
1
La profondeur d’un nœud (niveau d’un nœud ) et le nombre de
branches que je dois parcourir pour da la racine pour arriver à ce
nœud. 2 3 4
Exemple: 5 6 7 8 9
Profondeur de nœud étiqueté 7=2
Profondeur de nœud étiqueté 10=3 11 12
10
Terminologie
Profondeur (hauteur):
1
• La hauteur d’un arbre vide est 0.
Exercice d’application
• H(9) = 3 2 3 4 5
• H(7) = 2
6 7 8
9 10
Terminologie
Exemples: 5 6 7 8 9
Chemin du nœud 10 = (1,2,6,10)
Chemin du nœud 9 = (1,4,9) 11 12
10
Terminologie 1
5 6 7 8 9
Exemples:
Le nœud 1 est de degré 3, car il a 3 enfants
Le nœud 4 est de degré 2, car il a 2 enfants 10 11 12
Définition:
• Un arbre binaire est un cas particulier des arbres enracinés (un arbre de
degré 2).
• Un arbre binaire est un arbre tels que tout nœud a au plus un fils gauche et
au plus un fils droit. 1
4 5 6 7
8 9 10
Arbre parfait:
• Un arbre binaire dont tous les nœuds de chaque niveau sont présents est
appelé arbre parfait.
• Si le dernier niveau ne contient pas des nœuds, on dit que l'arbre parfait est
un arbre binaire incomplet si les feuilles du dernier sont regroupées à partir
de la gauche de l'arbre.
Arbre parfait:
Arbre parfait complet Arbre parfait incomplet
Exemple:
Le résultat d'affichage est : 12 ; 1 ; 7 ; 91 ; 67 ; 82 ; 61
Parcours en profondeur:
• Parcours préfixe
• Parcours infixe
• Parcours suffixe
Tout Nœud est suivi des nœuds de son sous-arbre Gauche puis des nœuds de
son sous-arbre Droit (Valeur, Fils-g, Fils-d).
Parcours prefixe(Arbre A)
Si A est non vide Alors
Afficher l’étiquette de A // Valeur
Parcours prefixe(Fils-g A)
Parcours prefixe(Fils-d A)
FinSi
Exemple:
Le résultat d'affichage est : 12 ; 1 ; 91 ; 67 ; 7; 82 ; 61
Tout Nœud est précédé des nœuds de son sous-arbre Gauche et suivi des
nœuds de son sous-arbre Droit (Fils-g, Valeur, Fils-d).
Parcours infixe(Arbre A)
Si A est non vide Alors
Parcours infixe(Fils-g A)
Afficher l’étiquette de A // Valeur
Parcours infixe(Fils-d A)
FinSi
Exemple:
Le résultat d'affichage est : 91 ; 1 ; 67 ; 12; 7; 61; 82
Tout Noeud est précédé des nœuds de son sous-arbre Gauche et des nœuds de
son sous-arbre Droit (Fils-g, Fils-d, Valeur).
Parcours postfixe(Arbre A)
Si A est non vide Alors
Parcours postfixe(Fils-g A)
Parcours postfixe(Fils-d A)
Afficher l’étiquette de A // Valeur
FinSi
Exemple:
Le résultat d'affichage est : 91 ; 67; 1 ; 61; 82; 7; 12
Exercice d’application
B
En donnant l’arbre suivant:
H E
Quel est le résultat d’affichage dans les cas suivants:
• Parcours préfixe
A T
• Parcours infixe
• Parcours postfixe
Solution:
BHATE–AHTBE–ATHEB
Exercice d’application
Quel type de parcours doit être utilisé pour évaluer une expression
arithmétique ?
+
* -
4 3 2 7
Implémentation
On implémente les arbres binaires non vides par des listes de trois éléments :
Arb=[15, [ 7, [6, None, None] , [9, None, None] ], [20, None,[25, None, None] ] ]
Un arbre vide est : Arb = None
Définition:
Implémentation:
Un arbre binaire parfait peut être implémenter avec une simple liste L , avec les
règles suivantes :
Règle 1: L[0] est la racine de l’arbre Règle 2: L[2*(i+1)-1] et L[2*(i+1)] sont les feuilles de L[i]
Implémentation: exemple
56
56 25
56
56 25 17
56 25 17 21
25 17
56 25 17 21 1
21 1 8 12
56 25 17 21 1 8
56 25 17 21 1 8 12
5
56 25 17 21 1 8 12 5
Exercice d’application:
Ecrire une fonction en Python « indice_fils(i) » qui renvoie les indice des fils
gauche et droit du nœud d’indice i
def indice_fils(i):
return 2*i + 1 , 2*i + 2
Chaque nœud est de valeur supérieure (resp. inférieure) à celles de ses deux
fils, pour un tri ascendant (resp. descendant).
Les étapes pour trier un tableau à l'aide du tri par tas sont:
Liste initiale:
7 27 41 30 10 31 22 3 23
7
27 41
30 10 31 22
3 23
Liste initiale:
7 27 41 30 10 31 22 3 23
7
27 41
30 10 31 22
3 23
Liste initiale:
7 27 41 30 10 31 22 3 23
7
7 30 41 27 10 31 22 3 23
30 41
27 10 31 22
3 23
Liste initiale:
7 27 41 30 10 31 22 3 23
41
7 30 41 27 10 31 22 3 23
41 30 7 27 10 31 22 3 23 30 7
27 10 31 22
3 23
Liste initiale:
7 27 41 30 10 31 22 3 23
41
7 30 41 27 10 31 22 3 23
41 30 31 27 10 7 22 3 23 30 31
27 10 7 22
Nouvelle liste (le Tas)
41 30 31 27 10 7 22 3 23
3 23
Exercice d’application:
0 12
4 3 1 9
Exercice d’application:
4 9
0 3 1 3
Exercice d’application:
4 9
Le tas est:
12 4 9 0 3 1 3
0 3 1 3
41
30 31
27 10 7 22
3 23
23
30 31
27 10 7 22
3 41
31
30 23
27 10 7 22
3 41
30 23
27 10 7 22
31 41
30
3 23
27 10 7 22
31 41
30
27 23
3 10 7 22
31 41
22
27 23
3 10 7 30
31 41
27
22 23
3 10 7 30
31 41
22 23
3 10 27 30
31 41
23
22 7
3 10 27 30
31 41
10
22 7
3 23 27 30
31 41
22
10 7
3 23 27 30
31 41
10 7
22 23 27 30
31 41
10
3 7
22 23 27 30
31 41
3 10
22 23 27 30
31 41
7 10
22 23 27 30
31 41
Tableau trié:
41 30 31 27 10 7 22 3 23
3
7 10
22 23 27 30
31 41
Exercice d’application:
Exercice d’application:
3. Si un nœud interne est situé à l'indice i, à quel indice est situé son fils gauche ? Son fils
droit ? Son père ?
1. 2i+1
2. 2i+2
3. (i-1)//2
Les ABR sont des structures de données qui peuvent supporter des opérations
courantes (recherche, min, max, …) sur des ensembles dynamiques.
Définition:
Définition:
24
16 29
8 20 27 35
1 15
Exercice d’application:
Parmi les arbres suivants, lesquels représentent un ABR ?
2 41
41
3
16 50
16 50
7
16 17 44 60
20 10 44 60
6 8
La propriété d’ABR permet d’afficher toutes les clés de l’arbre dans l’ordre
croissant à l’aide d’un algorithme récursif simple de parcours infixe.
41
Parcours infixe(Arbre A)
Si A est non vide Alors
16 50
Parcours infixe(Fils-g A)
Afficher l’étiquette de A // Valeur
Parcours infixe(Fils-d A)
16 17 44 60
FinSi
Insertion et suppression:
Insertion:
Successeurs et prédécesseurs:
étiquette de X.
16 17 44 60
Exemples:
Le successeur de 41 : 44 19 20
Le prédécesseur de 19: 17
Mohammed KASRI Analyse et conception des algorithmes ENSIASD - TAROUDANT 153
Les arbres binaires de recherche
Suppression:
Pour supprimer un nœud d’un arbre binaire de recherche, on distingue trois cas
à traiter :
Suppression:
Exemples:
3
3 3
2 6
2 6 2 6
1 4 7
1 4 7 1 4 7
5
5 5
Suppression:
Exemples:
3
3 3
2 6
2 6 2 6
1 4 7
4 7 1 4 7
5
5 5
Suppression:
Exemples:
3
3 3
2 6
2 6 1 6
1 4 7
4 7 1 4 7
5
5 5
Suppression:
Exemples:
3
3 3
2 6
2 6 1 6
1 4 7
4 7 4 7
5
5 5
Suppression:
Exemples:
4
3 3
2 6
2 6 1 6
1 4 7
4 7 4 7
5
5 5
Suppression:
Exemples:
4
3 3
2 6
2 6 1 6
1 4 7
4 7 4 7
5
5 5
Suppression:
Exemples:
4
3 3
2 6
2 6 1 6
1 5 7
4 7 4 7
5
5 5
Suppression:
Exemples:
4
3 3
2 6
2 6 1 6
1 5 7
4 7 4 7
5 5
Suppression:
Supprimer(x, Arbre A)
Si x < à l’étiquette de A Alors
Fils-g A <- Supprimer (x, Fils-g A)
Sinon Si x > à l’étiquette de A Alors
Fils-d A <- Supprimer (x, Fils-d A)
Sinon Si Fils-d est vide Alors
Retourner Fils-d A
Sinon Si Fils-g est vide Alors
Retourner Fils-g A
Sinon
Étiquette de A <- min(Fils-d A)
Fils-d A <- supprimer (Étiquette de A , Fils-d A)
FinSi
Retourner A
Introduction:
On peut représenter chaque abonné par un cercle (avec le nom de l'abonné situé dans le
cercle) et chaque relation "X est ami avec Y" par un segment de droite reliant X et Y ("X est
ami avec Y" et "Y est ami avec X" étant représenté par le même segment de droite).
Introduction:
• Entités = sommets
• Relations binaires = non orientées / orientées / pondérées
Mohammed KASRI Analyse et conception des algorithmes ENSIASD - TAROUDANT 166
Les graphes
Chaines alimentaires
Réseaux de transport
En informatique :
• Le web : chaque page est un sommet du graphe, chaque lien hypertexte est
une arête entre deux sommets.
• Un réseau social : les sommets sont les personnes, deux personnes sont
adjacentes dans ce graphe lorsqu’elles sont “amies”. Si la notion d’amitié
n’est pas réciproque, le graphe est orienté.
Exercice d’application:
– Algorithmique : étudiants A et B.
– Compilation : étudiants C et D.
– Bases de données : étudiants C, E, F et G.
– Java : étudiants A, E, F et H.
– Architecture : étudiants B, F, G et H.
Exercice d’application:
Cette situation peut être modélisée à l’aide d’un graphe.
– Algorithmique : A et B.
Java – Compilation : C et D.
– Bases de données : C, E, F et G.
Algo BD Com – Java : A, E, F et H.
– Architecture : B, F, G et H.
Arch
Exercice d’application:
Cette situation peut être modélisée à l’aide d’un graphe.
– Algorithmique : A et B.
A Java EF – Compilation : C et D.
– Bases de données : C, E, F et G.
C
Algo
FH BD Com – Java : A, E, F et H.
– Architecture : B, F, G et H.
B
Arch FG
Exercice d’application:
Cette situation peut être modélisée à l’aide d’un graphe.
– Algorithmique : A et B.
A Java EF – Compilation : C et D.
– Bases de données : C, E, F et G.
C
Algo
FH BD Com – Java : A, E, F et H.
– Architecture : B, F, G et H.
B
Arch FG
Exercice d’application:
Cette situation peut être modélisée à l’aide d’un graphe.
A Java EF
Session 1:
BD : C, E, F, G
Algo
C Algo : A,B
FH BD Com
B Session 2:
Arch FG
Java : A, E, F, H
Comp : C
Session 3:
Arch : B, F, G, H
Définition:
Dans un graphe non orienté, les relations entre les sommets se nomment arêtes.
Un graphe est dit non orienté lorsque les arêtes ne sont pas dotées d'une direction
spécifique, ce qui signifie que si deux sommets sont reliés par une arête, on peut voyager de
l'un à l'autre dans les deux sens.
• Graphe :
• Ensemble des nœuds (sommets, nodes, vertices) :
• Ensemble des arêtes (edgs):
• Arête est relation binaire:
•
• La relation binaire caractérisée par A est symétrique.
Exercice d’application:
x1 x2
x3 x4
Déterminer X et A.
Dans un graphe orienté, les relations entre les sommets se nomment arcs.
Un graphe est dit orienté lorsque les sommets sont reliés par des flèches, appelées arcs ou
arêtes orientées. Ce qui signifie que l'on peut voyager le long de l'arc uniquement dans le
sens déterminé par la flèche.
• Graphe :
• Ensemble des nœuds (sommets, nodes, vertices) :
• Ensemble des arcs :
• Arce est relation binaire orientés:
•
• La relation binaire caractérisée par A n’est pas symétrique.
Un graphe est dit pondéré lorsque les arêtes (arcs) ont un poids ou une valeur
numérique positive. Ces poids représentent une mesure telle que la distance, le
coût, la capacité, ou toute autre quantité pertinente entre les sommets qu'elles
relient.
Terminologies
Deux sommets d'un graphe sont dits adjacents s'il existe une arête (ou un arc)
qui les relie.
Terminologies
Terminologies
Une chaine ou un chemin est dit élémentaire si il ne comporte pas plusieurs fois
le même sommet.
Terminologies
Un graphe non-orienté est dit connexe lorsqu'il existe une chaîne reliant deux sommets
quelconques.
1 1 6
2 2
Graphe non-connexe
Graphe connexe
3 5 3 5
4
4
Un graphe non-orienté non-connexe se décompose en composantes connexes. Dans
l'exemple ci-dessus, le graphe non-connexe possède deux composantes connexes : {1,2,3,5}
et {4,6}.
Terminologies
Un graphe orienté est dit fortement connexe lorsque pour toute paire de
sommets distincts (A,B) il existe un chemin de A vers B et de B vers A.
A
D
B
C
Implémentation
Les sommets d’un graphe peuvent représenter n’importe quel type de donnée.
Le choix d’une représentation plutôt qu’une autre dépend des usages que l’on
souhaite faire du graphe (construction, parcours, …)
Exercice d’application
G= {
'A' : ['B', 'D'],
'B' : ['D'],
'C : ['B'],
'D' : ['B', 'C']
}
Graphe orienté :
Graphe orienté :
Exercice d’application
A B C D
A 0 1 0 1
B 0 0 0 1
C 0 1 0 0
D 0 1 1 0
Pour obtenir les voisins d’un sommet, il faut une utiliser une fonction de coût
d’ordre O(n).
Principe d’algorithme :
1. S est le sommet de départ
2. Cet algorithme liste d'abord les voisins de S pour ensuite les explorer un par
un.
3. Répétez (1) pour chaque voisin.
Illustration:
A D G
C
E
Illustration:
A D G
C
E
Illustration:
A D G
C
E
Illustration:
A D G
C
E
Illustration:
A D G
C
E
Illustration:
A D G
C
E
Principe d’algorithme :
Recherche qui progresse à partir d'un sommet S en s'appelant récursivement
pour chaque sommet voisin de S.
Illustration:
A D G
C
E
Illustration:
A D G
C
E
Illustration:
A D G
C
E
Illustration:
A D G
C
E
Illustration:
A D G
C
E
Illustration:
A D G
C
E
Illustration:
A D G
C
E
Illustration:
A D G
C
E
Le problème du Plus Court Chemin (PCC) compte parmi les problèmes le plus
classiques de la théorie des graphes et les plus importants dans leurs
applications.
Les sous-chemins des plus courts chemins sont des plus courts chemins.
• Label :
• Cout du chemin à l’origine s = 0
• Cout du chemin aux autres sommets ← ∞
Etapes A B C D E F G Choix
B 3
F
1 2 3 4
A 3 G
D
3 2
2 5
C 4
E
Etapes A B C D E F G Choix
B 3
F
1 2 3 4
A 3 G
D
3 2
2 5
C 4
E
Etapes A B C D E F G Choix
B 3 Etape 1 0
F
1 2 3 4
A 3 G
D
3 2
2 5
C 4
E
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞
F
1 2 3 4
A 3 G
D
3 2
2 5
C 4
E
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 X
3 4
A D
3 G X
X
3 2
2 5 X
C 4
E X
X
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A)
3 4
A D
3 G X
X
3 2
2 5 X
C 4
E X
X
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A) ∞ ∞ ∞ ∞
3 4
A D
3 G X
X
3 2
2 5 X
C 4
E X
X
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A) ∞ ∞ ∞ ∞ B(1)
3 4
A D
3 G X X
X X
3 2
2 5 X X
C 4
E X X
X X
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A) ∞ ∞ ∞ ∞ B(1)
3 4
A D
3 G Etape 3 X X (3,B) (4,B)
X X
3 2
2 5 X X
C 4
E X X
X X
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A) ∞ ∞ ∞ ∞ B(1)
3 4
A D
3 G Etape 3 X X (2,A) (3,B) ∞ (4,B) ∞
X X
3 2
2 5 X X
C 4
E X X
X X
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A) ∞ ∞ ∞ ∞ B(1)
3 4
A D
3 G Etape 3 X X (2,A) (3,B) ∞ (4,B) ∞ C(2)
X X X
3 2
2 5 X X X
C 4
E X X X
X X X
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A) ∞ ∞ ∞ ∞ B(1)
3 4
A D
3 G Etape 3 X X (2,A) (3,B) ∞ (4,B) ∞ C(2)
Etape 4 X X X (5,C)
3 2
2 5 X X X
C 4
E X X X
X X X
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A) ∞ ∞ ∞ ∞ B(1)
3 4
A D
3 G Etape 3 X X (2,A) (3,B) ∞ (4,B) ∞ C(2)
Etape 4 X X X (3,B)
3 2
2 5 X X X
C 4
E X X X
X X X
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A) ∞ ∞ ∞ ∞ B(1)
3 4
A D
3 G Etape 3 X X (2,A) (3,B) ∞ (4,B) ∞ C(2)
Etape 4 X X X (3,B) (6,C)
3 2
2 5 X X X
C 4
E X X X
X X X
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A) ∞ ∞ ∞ ∞ B(1)
3 4
A D
3 G Etape 3 X X (2,A) (3,B) ∞ (4,B) ∞ C(2)
Etape 4 X X X (3,B) (6,C) (4,B) ∞
3 2
2 5 X X X
C 4
E X X X
X X X
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A) ∞ ∞ ∞ ∞ B(1)
3 4
A D
3 G Etape 3 X X (2,A) (3,B) ∞ (4,B) ∞ C(2)
Etape 4 X X X (3,B) (6,C) (4,B) ∞ D(3)
3 2
2 5 X X X X
C 4
E X X X X
X X X X
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A) ∞ ∞ ∞ ∞ B(1)
3 4
A D
3 G Etape 3 X X (2,A) (3,B) ∞ (4,B) ∞ C(2)
Etape 4 X X X (3,B) (6,C) (4,B) ∞ D(3)
3 2
2 5 Etape 5 X X X X (6,C)
C 4
E X X X X
X X X X
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A) ∞ ∞ ∞ ∞ B(1)
3 4
A D
3 G Etape 3 X X (2,A) (3,B) ∞ (4,B) ∞ C(2)
Etape 4 X X X (3,B) (6,C) (4,B) ∞ D(3)
3 2
2 5 Etape 5 X X X X (5,D) (4,B) (6,D)
C 4
E X X X X
X X X X
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A) ∞ ∞ ∞ ∞ B(1)
3 4
A D
3 G Etape 3 X X (2,A) (3,B) ∞ (4,B) ∞ C(2)
Etape 4 X X X (3,B) (6,C) (4,B) ∞ D(3)
3 2
2 5 Etape 5 X X X X (5,D) (4,B) (6,D) F(4)
C 4
E X X X X X
X X X X X
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A) ∞ ∞ ∞ ∞ B(1)
3 4
A D
3 G Etape 3 X X (2,A) (3,B) ∞ (4,B) ∞ C(2)
Etape 4 X X X (3,B) (6,C) (4,B) ∞ D(3)
3 2
2 5 Etape 5 X X X X (5,D) (4,B) (6,D) F(4)
C 4
E Etape 6 X X X X (5,D) X (6,D)
X X X X X
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A) ∞ ∞ ∞ ∞ B(1)
3 4
A D
3 G Etape 3 X X (2,A) (3,B) ∞ (4,B) ∞ C(2)
Etape 4 X X X (3,B) (6,C) (4,B) ∞ D(3)
3 2
2 5 Etape 5 X X X X (5,D) (4,B) (6,D) F(4)
C 4
E Etape 6 X X X X (5,D) X (6,D) E(5)
X X X X X X
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A) ∞ ∞ ∞ ∞ B(1)
3 4
A D
3 G Etape 3 X X (2,A) (3,B) ∞ (4,B) ∞ C(2)
Etape 4 X X X (3,B) (6,C) (4,B) ∞ D(3)
3 2
2 5 Etape 5 X X X X (5,D) (4,B) (6,D) F(4)
C 4
E Etape 6 X X X X (5,D) X (6,D) E(5)
Etape 7 X X X X X X
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A) ∞ ∞ ∞ ∞ B(1)
3 4
A D
3 G Etape 3 X X (2,A) (3,B) ∞ (4,B) ∞ C(2)
Etape 4 X X X (3,B) (6,C) (4,B) ∞ D(3)
3 2
2 5 Etape 5 X X X X (5,D) (4,B) (6,D) F(4)
C 4
E Etape 6 X X X X (5,D) X (6,D) E(5)
Etape 7 X X X X X X (6,D)
Etapes A B C D E F G Choix
B 3 Etape 1 0 ∞ ∞ ∞ ∞ ∞ ∞ A(0)
F
1 2 Etape 2 X (1,A) (2,A) ∞ ∞ ∞ ∞ B(1)
3 4
A D
3 G Etape 3 X X (2,A) (3,B) ∞ (4,B) ∞ C(2)
Etape 4 X X X (3,B) (6,C) (4,B) ∞ D(3)
3 2
2 5 Etape 5 X X X X (5,D) (4,B) (6,D) F(4)
C 4
E Etape 6 X X X X (5,D) X (6,D) E(5)
Etape 7 X X X X X X (6,D) G(6)
Exercice d’application
16 G
B
12
11
9
A 21
10
C F H
14 11
16
13
D
10
10 E
Exercice d’application
1
F
B
10
A–B A → C → B (8)
3 9
A 2 A–C A → C (5)
5
4 A–F A → C → B → F (11)
5
A–D A → C → D (7)
C D
2
3
1. Initialisation: La phase d'initialisation consiste à définir les coûts initiaux des chemins :
• Cost_0(e) = 0 : Le coût du chemin du sommet de départ e à lui-même est 0.
• Cost_0(x) = ∞: Le coût initial de tous les autres sommets est infini .
2. Récurrence
Cost_k(x) = MIN (Cost_k-1(x), Cost_k-1(y) + W(y, x) ), pour tout y prédécesseur de x.
• Arrêt :
• Les couts n’évoluent pas
• Un nombre maximal d’itérations est atteint
1
D
B
6 Iteration A B C D E
8 0
A 2
1
1 -5
2
3
3
C E
2 4
1
D
B
6 Iteration A B C D E
8 0 0 ∞ ∞ ∞ ∞
A 2
1 0
1 -5
2 0
3
3 0
C E
2 4 0
1
D
B
6 Iteration A B C D E
8 0 0 ∞ ∞ ∞ ∞
A 2
1 0 6
1 -5
2 0
3
3 0
C E
2 4 0
1
D
B
6 Iteration A B C D E
8 0 0 ∞ ∞ ∞ ∞
A 2
1 0 6 3
1 -5
2 0
3
3 0
C E
2 4 0
1
D
B
6 Iteration A B C D E
8 0 0 ∞ ∞ ∞ ∞
A 2
1 0 6 3 ∞ ∞
1 -5
2 0
3
3 0
C E
2 4 0
1
D
B
6 Iteration A B C D E
8 0 0 ∞ ∞ ∞ ∞
A 2
1 0 6 3 ∞ ∞
1 -5
2 0 5 3
3
3 0
C E
2 4 0
1
D
B
6 Iteration A B C D E
8 0 0 ∞ ∞ ∞ ∞
A 2
1 0 6 3 ∞ ∞
1 -5
2 0 5 3 14
3
3 0
C E
2 4 0
1
D
B
6 Iteration A B C D E
8 0 0 ∞ ∞ ∞ ∞
A 2
1 0 6 3 ∞ ∞
1 -5
2 0 5 3 14 7
3
3 0
C E
2 4 0
1
D
B
6 Iteration A B C D E
8 0 0 ∞ ∞ ∞ ∞
A 2
1 0 6 3 ∞ ∞
1 -5
2 0 5 3 14 7
3
3 0 5 3 13 6
C E
2 4 0
1
D
B
6 Iteration A B C D E
8 0 0 ∞ ∞ ∞ ∞
A 2
1 0 6 3 ∞ ∞
1 -5
2 0 5 3 14 7
3
3 0 5 3 13 6
C E
2 4 0 5 3 13 6
1
D
B
6 Iteration A B C D E
8 0 0 ∞ ∞ ∞ ∞
A 2
1 0 6 3 ∞ ∞
1 -5
2 0 5 3 14 7
3
3 0 5 3 13 6
C E
2 4 0 5 3 13 6
Pred - C A B B
Exercice d’application
s
-3 3
4 2
d e
9 -1 -2 -3
a b c
-4 8
Exercice d’application
s
-3 3 Iteration s a b c d e
4 2
0 0 ∞ ∞ ∞ ∞ ∞
d e 1 0 -3 ∞ -3 4 2
9 -1 -2 -3 2 0 -3 0 -3 4 0
3 0 -4 -2 -3 4 0
a b c
8 4 0 -6 -2 -3 4 0
-4
5 0 -6 -2 -3 3 0
Pred - b e s a c
Exercice d’application
s
-3 3 Iteration s a b c d e
4 2
0 0 ∞ ∞ ∞ ∞ ∞
d e 1 0 -3 ∞ -3 4 2
9 -1 -2 -3 2 0 -3 0 -3 4 0
3 0 -4 -2 -3 4 0
a b c
8 4 0 -6 -2 -3 4 0
-4
5 0 -6 -2 -3 3 0
Pred - b e s a c