Algorithmique Avancée et Complexité UFR IEEA 20052006 Master 1 d'Informatique Fiche TD: Graphes 2 Exercice 1 : Chemins Maximaux Soit un graphe orienté pondéré. On cherche à calculer les chemins de valeur maximale entre une source et tous les sommets. Q 1. A quelle condition a-t-on un chemin de valeur maximale entre une source et un sommet quelconque? Q 2. Comment peut-on transformer le problème de recherche de chemins de valeur maximale en celui de recherche de chemins de valeur minimale? Q 3. On suppose que les poids sont non négatifs. Peut-on adapter l'algorithme de Dijkstra pour calculer les chemins de valeur maximale entre une source et tous les sommets? Q 4. Peut-on adapter l'algorithme de Bellman-Ford pour calculer les chemins de valeur maximale entre une source et tous les sommets? Exercice 2 : Des variantes... Probabilités Soit un graphe pondéré dirigé comportant éventuellement des circuits. Les valeurs des arcs représentent des probabilités. On cherche à calculer un chemin de plus grande probabilité entre un sommet et tous les autres sommets du graphe , sachant que la probabilité d'un chemin est le produit de celles des arcs qui le composent. Comment faire? Q 1. Débits Q 2. Soit un graphe pondéré dirigé comportant éventuellement des circuits. Les valeurs des arcs représentent maintenant des débits maxiamux. On cherche à calculer un chemin de débit maximal entre un sommet et tous les autres sommets du graphe , sachant que le débit d'un chemin est le minimum de ceux des arcs qui le composent. Quel algorithme peut-on utiliser? Exercice 3 : Tri topologique Soit un graphe orienté G = (S, A). Un tri topologique est une énumération des sommets s1 , ..., sn qui respecte l'ordre de précédence du graphe, c.à.d. que si (si , sj ) est un arc, on doit avoir i < j . Q 1. Soit le graphe avec 6 sommets A, B, C, D, E, F et les arcs suivants: (A, B), (A, D), (B, C), (D, C), (D, E), (C, F ), (E, F ) . Proposer un tri topologique pour ce graphe. Q 2. A quelle condition sur G une telle énumération existe-t-elle? Q 3. Comment peut-on utiliser le parcours en profondeur du graphe pour réaliser un tri topolgique? Q 4. Proposer un autre algorithme pour réaliser un tri topologique. Exercice 4 : Chemin critique Un projet est un ensemble de tâches avec leurs dépendances, qu'on peut voir comme un graphe orienté G = (S, A) où les sommets sont les tâches. On suppose qu'on dispose pour chaque tâche d'une durée (≥ 0). Les tâches sont numérotées de 1 à n. Donc un arc (i, j) indique la tâche j ne peut être commencée avant que la tâche i ne soit nie. On cherche donc à eectuer les tâches en respectant bien sûr les dépendances. Une programmation consiste donc à attribuer à chaque tâche une date de début deb(i), la date de n étant deb(i) + duree(i). On supppose que des tâches indépendantes peuvent être exécutées en parallèle. La durée de l'exécution correspondante sera alors le maximum des deb(i) + duree(i) (on suppose que la plus petite date de début est 0). Par exemple, supposons qu'on ait 6 tâches A, ..., F avec comme dépendances: (A, B), (A, D), (B, C), (D, C), (D, E), (C, F ), (E, F ) et comme durées 1 durée A: 2, durée B: 1, durée C: 4, durée D: 1, durée E: 3, durée F: 2. Q 1. A quelle condition une programmation est-elle correcte, i.e. respecte-t-ellle les dépendances? Donnez une programmation correcte des tâches sur l'exemple. Q 2. A quelle condition sur G une telle programmation existe-t-elle? Q 3.Donnez une programmation correcte de durée minimale des tâches sur l'exemple. Q 4. Quel lien voyez-vous entre ce problème et celui du plus long chemin? Comment calculeriez-vous la durée minimale d'une programmation correcte et une programmation correspondante? Exercice 5 : Bellman-Ford: le cas acyclique Implémenter l'algorithme de Bellman-Ford de façon dynamique itérative dans le cas d'un graphe acyclique. Exercice 6 : Horaires Supposions que vous disposiez des horaires de vol (ou de bus, de train, de bateau..) direct entre n villes. Vous voulez programmer une application qui cherche le plus court chemin entre deux villes à une heure donnée. On supposera dans un premier temps qu'on néglige le temps de transfert entre deux vols. Donc: Donnée: les horaires des vols directs entre les villes une heure de départ, une ville de départ, une ville d'arrivée Sortie: l'heure d'arrivée au plus tôt dans la ville d'arrivée et le plan de vol. Sur quel algorithme baseriez-vous votre implémentation? Comment? Justier. Comment prendriez-vous en compte dans votre calcul les temps nécessaires pour les correspondances? 2