Académique Documents
Professionnel Documents
Culture Documents
Paix-Travail-Patrie Peace-Work-Fatherland
Membre du groupe 4 :
𝐸 × 𝐹 = {(𝑥, 𝑦)/𝑥 ∈ 𝐸, 𝑦 ∈ 𝐹 }
𝐸 × 𝐸 = {(𝑥, 𝑦)/𝑥 ∈ 𝐸, 𝑦 ∈ 𝐸 }
b) Application univoque :
Étant donné deux ensembles E et F, une loi 𝛼 qui fait correspondre à tout élément 𝑥 Є 𝐸
un élément bien défini de F noté 𝛼𝑋 s’appelle une application univoque de E vers F.
c) Application multivoque :
Une application multivoque 𝚪 de E dans F est une loi qui fait correspondre à tout élément
𝑥 Є 𝐸 un sous-ensemble bien déterminé de F note Γ𝑌 .
d) Graphe :
Le graphe peut être aussi définie par le couple G = (E, U) ou E est un ensemble
dénombrable et U désigne l’ensemble des couples issus de l’application de la loi Γ, l’application
multivoque de E dans lui-même.
e) Arcs :
On appelle arc tout couple de points distincts du graphe donc tout couple (𝑥𝑝 , 𝑥𝑞 ) avec
𝑥𝑝 ≠ 𝑥𝑞 et 𝑥𝑝 𝑅𝑥𝑞 .
On appelle arcs adjacents deux arcs (𝑥𝑝 , 𝑥𝑞 ), (𝑥𝑞 , 𝑥𝑟 ) avec 𝑥𝑝 𝑅𝑥𝑞 et 𝑥𝑞 𝑅𝑥𝑟 . Les 𝑥𝑝 , 𝑥𝑞 , 𝑥𝑟
sont des sommets adjacents.
f) Chemin :
On appelle chemin une suite de sommets adjacents permettant de passer d’une manière
continue d’un sommet à l’autre c’est-à-dire une suite non vide d’arcs (𝑥𝑖 𝑅𝑥𝑗 ) et (𝑥𝑗 𝑅𝑥𝑘 ),
l’extrémité de chacun d’eux coïncident aves l’origine de l’arc suivant, sauf pour le dernier arc
de la suite.
• Un chemin est élémentaire s’il ne passe pas deux fois par le même sommet ;
• Un chemin est simple s’il ne contient pas deux fois le même arc ;
g) Circuit :
h) Valuation de graphe :
Soit G = (𝐸, Γ) un graphe orienté, sans boucle et valué. La longueur d’un chemin
quelconque est par définition la somme des longueurs des arcs qui comptent ce chemin.
𝑑(𝑥, 𝑦) = ∞
Le problème qu’on veut résoudre consiste à déterminer les plus courts chemins d’un
sommet à tous les autres dans un graphe valué (positif et/ou négatif) possédant une entrée, 𝒙𝟎 et
une sortie 𝒙𝒏 .
a) Motivation :
b) Algorithme de Ford :
• But de l’algorithme : C’est un algorithme qui calcule les plus courts chemins depuis
un sommet source donné dans un graphe orienté pondéré à tous les autres
sommets. Il autorise la présence de certains arcs de poids négatif et permet de
détecter l’existence d’un circuit absorbant, c’est-à-dire de poids total strictement
négatif accessible depuis le sommet et source. L’algorithme utilise le principe de
la programmation dynamique.
• Principe de l’algorithme : Cet algorithme fonctionne par étapes. À l’étape k, on
cherche de r vers tout sommet x de G, un plus court chemin. Dans un graphe
d’ordre n, les chemins élémentaires ont au plus n-1 arcs, l’ensemble des longueurs
des plus courts chemins trouvées à l’étape n-1 doit être identique à celui de l’étape
n sauf si les chemins que l’on construit ne sont pas tous élémentaires ce qui
implique que le graphe contient un circuit absorbant.
𝒂𝟎 = 𝟎 et 𝒂𝒊 = ∞ pour 𝒊 ≠ 𝟎
L’algorithme de Ford peut être très pratique dans divers aspects de l’ingénierie. Comme
il a été expliqué dans les paragraphes précédentes, l’algorithme de Ford permet de trouver le
plus court chemin entre deux nœuds distincts dans un graphe pondéré et dans beaucoup de
domaines, on peut appliquer cet algorithme, notamment :
Tous ceux-ci sont des exemples parmi tant d’autre de l’utilité de l’algorithme de Ford dans
les domaines de l’ingénierie.
1) AVANTAGES :
Un autre avantage non négligeable est sa capacité à travailler avec les arcs de poids
négatifs. Néanmoins, l’algorithme doit être capable de détecter les cycles d’arcs de poids tous
négatifs comme cité précédemment.
2) INCONVÉNIENTS :
À partir du nœud de départ, cet algorithme se réitère jusqu’à ce qu’il trouve plus de nœud
dont la distance (ou étiquette) peut être améliorée. Dans de nombreux cas, il examine plusieurs
fois un nœud déjà visité. Ceci pose aussi un problème de performance non négligeable.
De plus, le danger d’un tel algorithme est le fait d’être pris dans le piège d’un cycle dont
la somme des distances (ou étiquettes) est négative. Puisque l’algorithme compare la distance
de chaque nœud, cette dernière se trouve être améliorée continuellement dans un tel cycle.
1) VERSION RÉCURCIVE :
Si nbÉtape = 0
Retourner 0
Sinon
Retourner cheminMin
Ce pseudo-code traduit une simple récursion permettant d’explorer tous les chemins en
moins de nbÉtape jusqu’à l’arrivée, tout en sélectionnant le plus court d’entre eux. Pour cela,
l’algorithme utilise une simple boucle sur tous les voisins d’un nœud ainsi qu’une variable
cheminMin qu’on actualise pour toujours avoir le chemin avec la pondération minimale entre
tous les choix possibles.
plusCourtChemin[NB_ÉTAPE_MAX][NB_NOEUD_MAX]
Si nbÉtape = 0
Retourner 0
Sinon
Si plusCourtChemin[nbÉtape][nœud] != -1
Retourner plusCourtChemin[nbÉtape][nœud]
plusCourtChemin[nbÉtape][nœud] = cheminMin
Retourner cheminMin
On a seulement ajouté les trois points fondamentaux qu’on retrouve dans un processus de
dynamisation d’un algorithme :
Une fois qu’on a réussi à obtenir une complexité en temps non exponentielle (puisque
désormais on ne parcourt pas inutilement des parties du graphe), il est toujours intéressant de
tenter de réduire notre complexité en mémoire si possible. Dans le dernier pseudo-code, on a
une complexité mémoire de l’ordre O(KN), ce qui est équivalent à du O(N2), car on choisit la
limite K, tel que K=N pour éviter les cycles améliorants. Cet ordre de grandeur est tout à fait
correct en termes d’espace mémoire, surtout vu le gain de temps qu’on acquiert grâce au
tableau, mais il peut être encore largement amélioré.
plusCourtChemin [0][arrivée] = 0
plusCourtChemin[étape][nœud] = cheminMin
Pour ce qui est de l’espace mémoire, on peut se contenter de conserver une ligne unique
que l’on peut mettre à jour à chaque itération. On réussit alors à supprimer une dimension
entière et cela nous donne une complexité mémoire de O(N). Cette amélioration nécessite une
simplification du pseudo-code comme ci-dessous :
plusCourtChemin[arrivée] = 0
Retourner plusCourtChemin[départ]
a) Problème posé :
Dans le cadre du contrat, l’entreprise vous demande de déterminer les chemins minimaux
du réseau afin d’optimiser les prix de transport de leurs marchandises. Les entrepôts sont
schématisés par des points et les routes reliant ces différents entrepôts par des droites.
La valuation de chaque arc indique la distance séparant les entrepôts reliés par cet arc.
b) Solution proposée :
Tout d’abord c’est un problème de plus court chemin donc l’algorithme de Ford est
utilisable, avec les valuations, les distances entre des entrepôts, positives.
Considèrons le tableau qui récapitule les étapes de l’algorithme de Ford comme dit le
pseudo-code ci-dessus :
Les valeurs des plus courts chemins partant de 0 sont données par les 𝒂𝟓𝒊 .
a) Problème posé :
Tout d’abord c’est un problème de plus court chemin donc l’algorithme de Ford est
utilisable, avec les valuations positives et négatives.
Considère le tableau qui récapitule les étapes de l’algorithme de Ford comme dit le
pseudo-code ci-dessus,
Les valeurs des plus courts chemins partant de A sont données par les 𝒂𝟓𝒊 .