Cours sur les graphes : les algorithmes

Documents pareils
Chapitre 5 : Flot maximal dans un graphe

L exclusion mutuelle distribuée

Plus courts chemins, programmation dynamique

Algorithmes récursifs

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

Initiation à la programmation en Python

Chp. 4. Minimisation d une fonction d une variable

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Resolution limit in community detection

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

LE PROBLEME DU PLUS COURT CHEMIN

Algorithmes de recherche

Continuité et dérivabilité d une fonction

Ordonnancement temps réel

Cours de Master Recherche

Les transactions 1/46. I même en cas de panne logicielle ou matérielle. I Concept de transaction. I Gestion de la concurrence : les solutions

Introduction à la théorie des graphes. Solutions des exercices

Dualité dans les espaces de Lebesgue et mesures de Radon finies

Jean-Philippe Préaux

Bac Blanc Terminale ES - Février 2011 Épreuve de Mathématiques (durée 3 heures)

Eléments de Théorie des Graphes et Programmation Linéaire

Chapitre 6. Fonction réelle d une variable réelle


C f tracée ci- contre est la représentation graphique d une

Théorie des Graphes Cours 3: Forêts et Arbres II / Modélisation

Logiciel Libre Cours 3 Fondements: Génie Logiciel

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

Cours Fonctions de deux variables

Programmation linéaire

MIS 102 Initiation à l Informatique

Cours3. Applications continues et homéomorphismes. 1 Rappel sur les images réciproques

Optimisation Discrète

Optimisation for Cloud Computing and Big Data

Programmation parallèle et distribuée

Cours d électricité. Circuits électriques en courant constant. Mathieu Bardoux. 1 re année

5. Apprentissage pour le filtrage collaboratif

Programmation Par Contraintes

Sujet 4: Programmation stochastique propriétés de fonction de recours

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

Christophe CANDILLIER Cours de DataMining mars 2004 Page 1

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

BACCALAUREAT GENERAL MATHÉMATIQUES

Chapitre 2 Le problème de l unicité des solutions

CCP PSI Mathématiques 1 : un corrigé

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Site Web de l association des ingénieurs INSA de Lyon. Groupes d Intérêts. Note : dans ce guide, l'appellation GI signifie Groupe d'intérêt

Feuille TD n 1 Exercices d algorithmique éléments de correction

EPFL TP n 3 Essai oedomètrique. Moncef Radi Sehaqui Hamza - Nguyen Ha-Phong - Ilias Nafaï Weil Florian

3 Approximation de solutions d équations

Les algorithmes de base du graphisme

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

Exercices Corrigés Premières notions sur les espaces vectoriels

CONTROLE D ACCES A TRANSPONDEUR LECTEUR DE BADGE SANS CONTACT ST

TABLE DES MATIÈRES CHAPITRE I. Les quanta s invitent

Introduction aux algorithmes répartis

Eteindre. les. lumières MATH EN JEAN Mme BACHOC. Elèves de seconde, première et terminale scientifiques :

Correction du baccalauréat ES/L Métropole 20 juin 2014

Définitions. Numéro à préciser. (Durée : )

DUT Techniques de commercialisation Mathématiques et statistiques appliquées

Exemples de problèmes et d applications. INF6953 Exemples de problèmes 1

1 Recherche en table par balayage

Résolution de systèmes linéaires par des méthodes directes

Recherche dans un tableau

Rappels sur les suites - Algorithme

Cours de Génie Logiciel

Modèles à Événements Discrets. Réseaux de Petri Stochastiques

Module 16 : Les fonctions de recherche et de référence

Comparaison de fonctions Développements limités. Chapitre 10

Intelligence Artificielle Planification

Chapitre 3. Quelques fonctions usuelles. 1 Fonctions logarithme et exponentielle. 1.1 La fonction logarithme

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

I. Ensemble de définition d'une fonction

Ebauche Rapport finale

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

EP A1 (19) (11) EP A1 (12) DEMANDE DE BREVET EUROPEEN. (43) Date de publication: Bulletin 2012/50

Texte Agrégation limitée par diffusion interne

Baccalauréat ES Pondichéry 7 avril 2014 Corrigé

Parallélisme et Répartition

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

GLEIZE ENERGIE SERVICE

Raisonnement probabiliste

Réalisabilité et extraction de programmes

1.6- Génération de nombres aléatoires

Quelques Algorithmes simples

Initiation à LabView : Les exemples d applications :

Service de noms des domaines (Domain Name System) Cours administration des services réseaux M.BOUABID,

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Image d un intervalle par une fonction continue

Encryptions, compression et partitionnement des données

Techniques d ordonnancement pour les SoC

Les indices à surplus constant

Raisonnement par récurrence Suites numériques

Big Data et Graphes : Quelques pistes de recherche

Programmation Linéaire - Cours 1

Université Paris-Dauphine DUMI2E 1ère année, Applications

Manuel d'utilisation avec le superviseur ISCANSERVER et le client VEHICLE Network System

NOTICE TELESERVICES : Créer mon compte personnel

Bases de données documentaires et distribuées Cours NFE04

Transcription:

IUT Info 2 GI Année 2007-08 Période 1 et 2 : les algorithmes F. Madelaine C. Simon 1 L algorithme de Bellman-Ford et ses variantes Dans le cas classique, il s agit de calculer les distances des plus courts chemins depuis une source s à chaque autre sommet v d un graphe orienté valué G. Les distances sont non pas en termes de nombres d arcs d un chemin mais, en termes de somme des valeurs de chaque arc qui le compose. En effet, on travaille sur un graphe orienté valué, c est-à-dire qu on dispose d une fonction sur les arcs de G à valeur dans R. En termes plus informatique, on a à notre disposition la fonction suivante : length(u, v, G) : renvoie la valeur de l arc (u, v) dans le graphe orienté valué G (si l arc existe). Algorithme 1 : Bellman-Ford G un graphe orienté valué sans circuit de longueur strictement négative s un sommet de G L tableau des distances depuis s /* indexé par les sommets */ pour tous les sommet v s faire L[v] := + tant que L change faire /* relaxation de l arc (u, v) */ si L(v)>L(u)+length((u, v, G)) alors L(v) :=L(u)+length((u, v, G)) prch tq Sorties : L, le tableau des distances des plus court chemins de s Ici, nous détaillons l algorithme dans le cas où l entrée a un plus court chemin. Autrement dit, si le graphe n a pas de circuit de longueur strictement négative. 1

Mémoriser les chemins. En plus de calculer la longueur d un plus court chemin depuis s, on peut aussi stocker un plus court chemin. En effet, à chaque fois qu on relâche un arc (u, v), cela signifie que le chemin de s à v passe dorénavant par u, autrement dit le prédécesseur de v est maintenant le sommet u. On peut par exemple stocker ces prédécesseurs dans un tableaux indexé par les sommets du graphe. Voir l algorithme 2 ci-contre pour une implémentation (les lignes correspondantes sont en bleu). Détecter si un graphe quelconque a un circuit négatif. On peut montrer que l algorithme de Bellman-Ford (Algorithme 1) s arrête après au plus n 1 executions de la boucle Tant que, dans le cas d un graphe sans circuit de poids négatif (ici n est le nombres de sommets du graphe). La preuve se fait par récurrence sur le nombre d itérations et l hypothèse de récurrence est la suivante. Au bout de x itérations de la boucle Tant Que, pour tout sommet v, L[v] est la longueur du plus court chemin de s à v parmi ceux qui ont au plus x arcs. Si un graphe connexe a un circuit négatif, alors il n y a pas de plus court chemin depuis s vers certains sommets (en particuliers ceux qui sont sur ce circuit négatif). Donc, l algorithme 1 sur un tel graphe executerait indéiment dans la boucle Tant Que. En particulier, cette dernière s executerait au moins n fois. On peut donc executer la boucle Tant Que n fois sur un graphe quelconque, et si à la dernière itération, la valeur de L change, alors on sait qu il y a un circuit négatif. Voir l algorithme 2 ci-contre pour une implémentation (les lignes correspondantes sont en vert). Algorithme 2 : Bellman-Ford (amélioré) G un graphe orienté valué connexe s un sommet de G L tableau des distances depuis s P red tableau des prédécesseurs sur un plus court chemin depuis s Circuit? Booléen vrai ssi il y a un circuit négatif pour tous les sommet v s faire L[v] := + Circuit? := faux. pour x = 0 à n 1 faire si L(v)>L(u)+length((u, v, G)) alors L(v) :=L(u)+length((u, v, G)) Pred[v] :=u prch pour si L(v)>L(u)+length((u, v, G)) alors Circuit? := vrai prch Sorties : L, P red, Circuit?. 2

Variantes Le cas dual : distance vers un sommet Au lieu de calculer des plus courts chemins depuis s vers tous les sommets, on peut calculer la distance des plus courts chemins depuis n importe quel sommet à un sommet t (voir algorithme 3). Algorithme 3 : Variante de Bellman-Ford (le cas dual) G un graphe orienté valué sans circuit de longueur strictement négative t un sommet de G L tableau des distances vers un sommet à t Succ tableau des successeurs sur un plus court chemin à t L[t] := 0 pour tous les sommet v t faire L[v] := + tant que L change faire si L(u)>L(v)+length((u, v, G)) alors L(u) :=L(v)+length((u, v, G)) Succ[u] :=v prch tq Sorties : L, succ Plus long chemin vers un sommet Au lieu de calculer des plus courts chemins depuis s vers tous les sommets, on peut calculer la distance des plus longs chemins. Bien evidemment, l algorithme a maintenant des limitations différentes : il n a de sens que dans un graphe sans circuit strictement positif (voir algorithme 4). Algorithme 4 : Autre variante de Bellman-Ford (plus long chemin) G un graphe orienté valué sans circuit de longueur strictement positive s un sommet de G L tableau des distances depuis un sommet s P red tableau des successeurs sur un plus court chemin à t pour tous les sommet v s faire L[v] := tant que L change faire si L(v)<L(u)+length((u, v, G)) alors L(v) :=L(u)+length((u, v, G)) Pred[v] :=u prch tq Sorties : L, Pred 3

2 Parcours Dans un graphe non-orienté G à partir d un sommet s, on découvre les sommets de la composante connexe de s dans G (c est-à-dire l ensemble des sommets accessibles par un chemin depuis s dans G). Lors du calcul, on utilise un ensemble Z pour stocker les sommets déjà visités, et une variable F pour stocker les sommets de la frontière, c est-à-dire ceux ayant au moins un voisin non visité. Selon la structure de donnée qu on utilise pour F on obtient des parcours différents. Structures de données L ensemble On dispose des fonctions suivantes sur un ensemble S. choose(s) : renvoie un sommet x de S (si S n est pas vide). empty?(s) : renvoie vrai ssi S est l ensemble vide. add(x, S) : ajoute x à l ensemble S. remove(x, S) : enlève x de l ensemble S (si x appartient à S). La file On dispose des fonctions suivantes sur une file Q. checkfront(q) : renvoie le premier sommet de F (si Q n est pas vide). empty?(q) : renvoie vrai ssi Q est la file vide. pushback(x, Q) : ajoute x à l arrière de la file Q. popfront(q) : enlève le premier sommet de la file Q (si celle-ci n est pas vide). La pile On dispose des fonctions suivantes sur une pile P. checkfront(p ) : renvoie le premier sommet de P (si P n est pas vide). empty?(p ) : renvoie vrai ssi P est la pile vide. pushfront(x, P ) : ajoute x au de la pile P. popfront(p ) : enlève le premier sommet de la pile P (si celle-ci n est pas vide). Algorithmes de parcours Algorithme 5 : Parcours général G un graphe Z un ensemble /* zone connue */ F un ensemble /* la frontière */ u, v deux sommets add(s,f ) v :=choose (F ) add(u,f ) /* première visite de u */ add(u,z) remove(v,f ) /* dernière visite de v */ 4

Algorithme 6 : Parcours en largeur G un graphe Z un ensemble /* zone connue */ F une file /* la frontière */ u, v deux sommets pushback(s,f ) pushback(u,f ) Algorithme 7 : Parcours en profondeur G un graphe Z un ensemble /* zone connue */ F une pile /* la frontière */ u, v deux sommets pushfront(s,f ) pushfront(u,f ) 5

Application du parcours en largeur Applications du parcours en profondeur Distance à la source On peut calculer la distance depuis la source s à chaque sommet v du graphe (si G est connexe). En effet, on peut facilement observer que les niveaux de l arbre (= distance à la racine) correspondent à la distance à la source. Algorithme 8 : Parcours en largeur + distance à la source G un graphe connexe et Z un ensemble, F une file, u, v deux sommets L tableau des distances à la source /* indexés par les sommets */ pushback(s,f ) pushback(u,f ) L[u] := L[v] + 1 Sorties : L, tableau des distances à la source s On s intéresse au moment où on visite un sommet pour la première fois et celui où on le visite pour la dernière fois. On a deux tableaux Début et Fin dans lesquels on stocke les temps correspondant. On mesure le temps en termes du nombre x d executions de la boucle. Algorithme 9 : Parcours en profondeur + et G un graphe connexe et Z un ensemble, F une pile et u, v deux sommets Debut et Fin deux tableaux /* indexés par les sommets */ x=0 pushfront(s,f ) Début[s] := x x := x + 1 pushfront(u,f ) Début[s] := x Fin[s] := x 6

Algorithme 10 : Parcours en profondeur + Tri Topologique G un graphe orienté sans cycle Le Tri topologique. On dispose d un graphe orienté sans cycle. Un tel graphe représente typiquement un problème d ordonnancement de tâches : un sommet correspond à une tâche et un arc (u, v) indique la contrainte de précédence la tâche u doit être terminée avant que la tâche v ne puisse commencer. Le problème du tri topologique consiste à ordonner les sommets du graphe de telle sorte que si il y a un arc (u, v) alors u vient avant v dans l ordre calculé. Bien que le graphe soit orienté, on peut parfaitement y appliquer l algorithme de parcours en profondeur. On peut observer que la dernière visite d un sommet a forcément lieu avant la dernière visite d un sommet qui le précède. Ainsi, on peut voir les valeurs calculées dans le tableau Fin comme des valeurs de priorité : plus la valeur est haute, plus la tâche est importante. Autrement dit, l ordre inverse de celui donné par Fin est un ordre topologique. Z un ensemble, F une pile et u, v deux sommets Priorité un tableau /* indexé par les sommets */ x=0 pushfront(s,f ) x := x + 1 si il existe u Z successeur de v alors pushfront(u,f ) Priorité[s] := x Sorties : Priorité 7