Beruflich Dokumente
Kultur Dokumente
Math
ematiques
TP n 6
-NC
DUT Informatique
semestre 2
Exercice 1
-BY
Algorithme de Bellman-Ford-Kalaba
On veut calculer les chemins de longueur minimale dans un graphe a` partir dun
sommet sen utilisant lalgorithme :
1.fr
lice
nce
CC
nes
-ren
1. Ecrire
une fonction [Dist,Pred] = Bellman (G,s) qui calcule les distances minimale depuis le sommet s et les listes de predecesseurs correspondantes, suivant
lalgorithme de Bellman-Ford-Kalaba.
2. Verifier quon retrouve bien les resultats obtenus dans lexercice precedent.
k x
0 0
4
3
phi
lipp
1
0
e.ro
10
ux@
uni
v
3. Ajouter la commande disp([k x Dist Pred]) juste avant la fin de la conditionnelle si alors fin et lancer la commande Bellman(G,1). Completer en
consequence le tableau de calcul des distances minimales pour le graphe exo637G.graph
depuis le sommet s = 1 :
Dist
3
4
1
0
2
0
Pred
3
4
0
0
5
0
-SA
DUT Informatique
semestre 2
Math
ematiques
TP n 6
-NC
Exercice 2
5
6
nce
CC
-BY
10
lice
1.fr
1. Ecrire
une fonction [Dist,Pred] = Bellman Max (G,s) qui calcule les distances
maximale depuis le sommet s et les listes de predecesseurs correspondantes, suivant
lalgorithme de Bellman-Ford-Kalaba.
Indication : au depart il faut remplacer les par dans Dist
e.ro
ux@
uni
v
-ren
lipp
1
0
phi
k x
0 0
Dist
2
3
4
nes
1
0
2
0
Pred
3
4
0
0
5
0
6
0
-SA
Math
ematiques
TP n 6
-NC
DUT Informatique
semestre 2
Exercice 3
Algorithme de Dijkstra
lice
nce
CC
-BY
1.fr
C
1
{1 ;2 ;3 ;4 ;5} 0
lipp
D
{}
phi
s
0
e.ro
ux@
uni
v
-ren
nes
1. Ecrire
une fonction [C,x] = Sommet Optimal(Dist,C) qui trouve le sommet x
de C dont la distance Dist(x) est minimale et retire x de C (voir les exemples
page suivante) dans le cas ou toutes les distances des sommets de C sont infinies la
fonction doit renvoyer x=0 et C=[ ].
2. Ecrire
une fonction [Dist,Pred] = Dijkstra(G,s) qui calcule les distances minimales depuis le sommet s dans le graphe G et les listes de predecesseurs correspondantes, suivant lalgorithme de Dijkstra-Moore. Ajouter un controle au debut
de Dijkstra(G,s) pour que la fonction ne sexecute que si les arcs du graphe G
ont tous un poids positif. Sinon on renverra des matrices vides pour Dist et Pred
et un message davertissement dans la console (avec warning ou disp).
Indication : les poids des arcs sont dans G.edge weight les couleurs dans G.edge color
3.
8
1
4
Verifier les resultats sur le graphe
9
exo427G.graph,
ci-contre,
2
10
1
2
completer le tableau de calcul
des distances minimales et faire
1
apparatre larbre des distances
minimales en rouge.
5
3
5
Dist
2
3
4
5 1 2
0 0
Pred
3 4 5
0 0 0
-SA
Math
ematiques
TP n 6
-NC
DUT Informatique
semestre 2
CC
-BY
lice
nce
1
-->// remplir un tableau manuellement
-->C=[4 3 1 5 2]
5
3
5
C =
4.
3.
1.
5.
2.
Exemples de resultats que vous devriez obtenir avec la fonction Sommet_Optimal
-->// obtenir une valeur dun tableau
-->C(1)
-->C=[1:5],Dist=[%inf 0 3 %inf 1]
ans =
C =
4.
1.
2.
3.
4.
5.
phi
lipp
e.ro
ux@
uni
v
-ren
nes
1.fr
Dist =
-->// sortir cette valeur du tableau
Inf
0.
3.
Inf
1.
-->C(1)=[]
-->[C,x] = Sommet_Optimal(Dist,C)
C =
x =
3.
1.
5.
2.
2.
Utiliser la fonction Matrice_Poids C =
1.
3.
4.
5.
(faites en TP) pour recuperer le poids des
-->C=[1 3 4],Dist=[%inf 0 3 %inf 1]
arcs dans lalgorithme de Dijkstra :
C =
-->W=Matrice_Poids(G)
1.
3.
4.
W =
Dist =
Inf
0.
3.
Inf
1.
Inf
Inf
10.
8.
Inf
-->[C,x] = Sommet_Optimal(Dist,C)
Inf
Inf
Inf
Inf
Inf
x =
Inf
Inf
Inf
Inf
5.
3.
Inf
9.
1.
Inf
Inf
C =
Inf
1.
Inf
2.
Inf
1.
4.
-->C=[1:5],Dist=%inf+zeros(1,5)
-->[G.head;G.tail] // les arcs
C =
ans =
1.
2.
3.
4.
5.
Dist =
4.
3.
3.
5.
4.
2.
2.
Inf
Inf
Inf
Inf
Inf
1.
1.
4.
3.
5.
4.
5.
-->[C,x] = Sommet_Optimal(Dist,C)
x =
-->G.edge_weight // les poids
0.
ans =
C =
8. 10.
1.
5.
2.
9.
1.
[]