TD 5

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 2

Algorithmes de Graphes, HLIN501 Année 2016-2017

TD 5
L3 Info, L3 Math-Info.

- TD 5. Plus courts chemins -

- Exercice 1 -
On considère le graphe orienté et pondéré suivant :
2 3
a d g
1 5
10 1
7 6
11
b e h
1 8
4 1
2
c f

1. Utiliser l’algo de Dijkstra pour calculer une arborescence des plus courts chemins issue de a.
2. La longueur de l’arc ge est en fait -8. Refaire la question précédente. Que constatez vous ?
3. Utiliser cette fois l’algorithme de Bellman-Ford pour trouver une arborescence des plus courts
chemins issue de a. On traitera les arcs selon l’ordre alphabétique.
4. Une seconde modification a lieu, la longueur de l’arc f h est maintenant de 1 (la longueur de
ge est toujours -8). Relancer l’algorithme de Bellman-Ford. Que constatez vous ?

- Exercice 2 - PCC pour DAG.


On considère l’algorithme suivant :

Algorithme : ALGO
Données : Un graphe orienté acyclique D = (V, E) donné par listes de voisins entrants,
l : E → IR et r un sommet de D.
Résultat : Deux fonctions : d : V → IR et pere : V → V .
1 début
2 Calculer un tri topologique v1 , . . . , vn de D;
3 pour tous les x ∈ V faire
4 d[x] ←− +∞;
5 pere[x] ←− x;
6 d[r] ←− 0;
7 pour tous les i = 1, . . . , n faire
8 pour tous les y ∈ V ois− (vi ) faire
9 si d[y] + l(yvi ) < d[vi ] alors
10 d[vi ] ←− d[y] + l(yvi );
11 pere[vi ] ←− y;

1. Appliquer l’algorithme précédent sur le graphe D = (V, A) où V = {a, b, c, d, e, f, g}, A est
donné ci-dessous avec les longueurs associées et r = a.
ab ac be bf bg cb ce cf dc eg
l(.) -3 5 1 4 5 2 1 1 6 6

1
Algorithmes de Graphes, HLIN501 Année 2016-2017
TD 5
L3 Info, L3 Math-Info.

2. Que calcule ALGO ?


3. Préciser la complexité de cet algorithme.
4. Prouver la validité de ALGO.

- Exercice 3 - Cycles orientés de poids négatif.


Soit D = (V, A) un graphe orienté et ω : A → IR une fonction de poids.
a. Appliquer l’algorithme de Floyd-Warshall au graphe orienté D ayant pour ensemble de sommets
V = {a, b, c, d}, d’arcs A = {ba, ac, cd, cb, bd} et fonction de poids ω(ba) = −1, ω(ac) = 3,
ω(cd) = 1, ω(cb) = 8, ω(bd) = −8. Vous donnerez les plus courts chemins et leur longueur.
b. Même question que précédemment mais après avoir inversé la direction de l’arc bd (qui devient
donc db), tout en conservant son poids.
c. Comment peut-on détecter la présence d’un cycle orienté de poids négatif après l’exécution de
Floyd-Warshall ?

- Exercice 4 - Vrai/Faux.
Confirmer (et prouver) ou infirmer (et donner un contre-exemple) les propriétés suivantes :
a. Un sous-chemin d’un plus court chemin est un plus court chemin.
b. Si r est un sommet d’un graphe orienté D pondéré par des longueurs positives toutes distinctes,
alors D possède une unique arborescence des plus courts chemins issue de r.
c. Dans tout graphe G non orienté, connexe et valué positivement sur ses arêtes, il existe un arbre
des plus courts chemins de G qui est aussi un arbre couvrant de poids min de G de même racine.
d. Si un graphe orienté et valué sur ses arêtes possède certaines longueurs négatives, pour calculer
un arbre des plus courts chemins, il suffit d’ajouter − min{l(xy) : xy ∈ E} sur chaque arête
puis d’utiliser l’algorithme de Dijkstra.
e. Pour tout graphe G non orienté, connexe et valué sur ses arêtes, et pour tout sommet r de G, il
existe un arbre des plus courts chemins issu de r.

- Exercice 5 - Coupes.
Soient x et y deux sommets d’un graphe orienté D = (V, A) tel qu’il existe un chemin orienté de x
à y. Un ensemble C ⊆ A est une xy-coupe si tous les chemins de x à y contiennent un arc de C
a. Montrer que si C est une xy-coupe, il existe un ensemble X de sommets tel que C contient tous
les arcs de X à V \ X.
b. Montrer que le nombre maximum de xy-coupes disjointes est égal à la longueur minimum d’un
xy-chemin.

- Exercice 6 - Arbitrage.
L’arbitrage est l’utilisation du décalage entre les taux de change d’une monnaie pour transformer
une unité de monnaie en plus d’une unité de la même monnaie. Par exemple, si 1e = 1,51 $ U.S., 1 $
U.S. = 0,62 £ et 1 £= 1,11e, un spéculateur peut, avec un euro, acheter 1, 51 × 0, 62 × 1, 11 = 1, 039
euros.
Comment devenir riche ? Et avec quelle complexité ?

Vous aimerez peut-être aussi