Module 5 : Algorithmes de graphes

Slides:



Advertisements
Présentations similaires
La recherche de chemin optimal
Advertisements

Théorie des graphes.
Algorithmes et structures de données avancées Cours 4
Algorithmes et structures de données avancées Cours 6 Patrick Reuter
Quelle est la question?.
UMLV 1 Problème G = (S, A) graphe (orienté) Calculer H = (S, B) où B est la clôture réflexive et transitive de A. Note : (s,t) B ssi il existe un chemin.
Cours de graphes Les plus courts chemins,
Chapitre VIII. Introduction aux graphes
Plus courts chemins On présente dans ce chapitre un problème typique de cheminement dans les graphes : la recherche d'un plus court chemin entre deux sommets.
Algorithme de Dijkstra
Heuristiques A. Introduction B. Recherche d ’une branche
MODULE 6 Optimisation de GRAPHES
IFT313 Introduction aux langages formels
Théorie des graphes Un peu de vocabulaire.
Module 4 : Parcours dans un graphe
Pr ZEGOUR Djamel Eddine
Algorithme de Bellman-Ford
IFT-2000: Structures de données Les graphes Dominic Genest, 2009.
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT-2000
Coloration gap sommet identifiante de graphes

Algorithmes d ’approximation
PROBLEMES DE DEGRE-DIAMETRE DE GRAPHES DANS LE CAS GENERAL
Optimisation de GRAPHES
- GRAPHES - Composantes et types
21 février 2006Cours de graphes 2 - Intranet1 Cours de graphes Les plus courts chemins, les chemins les plus légers : à laide de la vague, à laide de la.
Programmation dynamique
Atelier de formation : MAT optimisation II (les graphes).
Pour le chemin le plus court pour tous les couples
Structures de données IFT-2000 Abder Alikacem Arbres de recouvrement minimum Département dinformatique et de génie logiciel Édition Septembre 2009 JFK.
Structures de données IFT-10541

Graphes 1. Introduction 2. Définition 3. Représentation mémoire
Dév. d’application interactive III Recherche de chemin.
Arbres et graphes.
Y and en Two little words with a lot of meaning. y.
On cherche le plus court chemin de E à S sur le graphe suivant :
Tutorat 7 - Introduction au Routage et OSPF
Algorithmes de tri et de recherche
Unité 1: Faisons Connaissance Leçon 2 Famille et copains
Laboratoire des outils informatiques pour la conception et la production en mécanique (LICP) ÉCOLE POLYTECHNIQUE FÉDÉRALE DE LAUSANNE 1 Petri nets for.
LE FLOT MAXIMAL et LA COUPE MINIMALE
C’est combien ? Les euros
Objectif: Comment employer un exposant?. Objective: How to use an exponent?
Unité 1: Faisons Connaissance Leçon 1 Bonjour!
Chapter 6 Lesson 1 Essential Questions: How can you talk about the city in French? How can you describe how you travel in the city?
Depuis Describing how long one has been doing something.
Structures de données et algorithmes – TP7 Maria-Iuliana Dascalu, PhD
Irregular Adjectives Not all adjectives are made the same.
Les verbes réfléchis.
FLASH! Power Point Sample. Use FLASH! with any level I put a variety of topics in here so you can see how to make a FLASH! with different levels of learners.

Ajouts et retraits dans un arbre de connexion Nicolas Thibault et Christian Laforest, Équipe OPAL Laboratoire IBISC (regroupement LaMI et LSC), Évry 8.
Algorithme de DIJKSTRA
Mettre. First, let’s review the irregular verbs we know. Think of as many as you can, while I hand out whiteboards.
The Perfect Tense with être. Some General Rules Most verbs in French, when used in the past tense, need a part of the verb avoir J’ai Tu as Il a / Elle.
1. Est-ce que Est-ce que, literally translated "is it that," can be placed at the beginning of any affirmative sentence to turn it into a question: Je.
Sixième étape : pondérer les graphes. Longueur d’une chaîne d’un graphe quelconque = nombre des arêtes qui la constituent. Distance entre deux sommets.
Unité 6 Leçon B. Forming yes/no questions  To form a yes/no question in French in the simplest way, add a question mark at the end of the sentence, and.
CSI2510 Structures de données et algorithmes Plus court chemin
Traversées (Parcours ) de graphes
CSI2510 Structures de données et algorithmes Arbres couvrants minimaux
Making Purchases Combien en voulez-vous? Je voudrais une livre de tomates. C’est combien, s’il vous plaît? C’est 4 euros.
Clique Percolation Method (CPM)
Negative sentences Questions
Les normes: Communication 1.1 – Understanding the spoken and written language Comparisons 4.1 – Understanding the nature of language through comparisions.
DESSINER ET GRIFFONNER LES LIGNES ET LES FORMES. Useful Verbs Utiliser – to use Créer – to create Représenter – to represent Donner – to give Démontrer.
Transcription de la présentation:

Module 5 : Algorithmes de graphes

Algorithmes de graphes Plan du module Arbre couvrant minimum Algorithme de Prim Algorithmes de plus court chemin Algorithme de Dijkstra Algorithme de Floyd Problème 10034 19/7/2006 Algorithmes de graphes

Arbre couvrant minimum Un arbre couvrant pour un graphe non-orienté G est composé de tous les sommets de G avec un sous-ensemble des arêtes de G qui Relient les sommets; il existe un chemin entre tous les sommets de l’arbre couvrant Forment un arbre sans racine, non ordonné, sans cycle. 19/7/2006 Algorithmes de graphes

Arbre couvrant minimum Un arbre couvrant minimum est un arbre couvrant dont la somme des étiquettes (valeurs attachées aux arêtes) est minimale. 19/7/2006 Algorithmes de graphes

Arbre couvrant minimum d b 2 4 5 9 6 a c e d b 2 4 5 9 6 19/7/2006 Algorithmes de graphes

Arbre couvrant minimum Algorithme de Prim L’arbre est construit nœud après nœud partant d’un nœud initial À chaque itération un nœud est ajouté à l’arbre couvrant On ajoute toujours le nœud reliant l’arbre avec l’arête de moindre poids 19/7/2006 Algorithmes de graphes

Arbre couvrant minimum d b 2 4 5 9 6 a c e d b 2 4 5 9 6 A B C D E intree F distance ∞ parent -1 A B C D E intree T F distance ∞ parent -1 19/7/2006 Algorithmes de graphes

Arbre couvrant minimum d b 2 4 5 9 6 Le nœud de départ est A. La table des distances et des parents est mise à jour pour tous les nœuds adjacents à A. On sélectionne parmi les nœuds restants celui relié par l’arête de plus petit poids. A B C D E intree T F distance 9 5 2 ∞ parent -1 19/7/2006 Algorithmes de graphes

Arbre couvrant minimum d b 2 4 5 9 6 Le nœud de départ est D. La table des distances et des parents est mise à jour pour tous les nœuds adjacents à D pas encore dans l’arbre. On sélectionne parmi les nœuds restants celui relié par l’arête de plus petit poids (ici C et E possibles). A B C D E intree T F distance 6 4 2 parent -1 19/7/2006 Algorithmes de graphes

Arbre couvrant minimum d b 2 4 5 9 6 Le nœud de départ est C. La table des distances et des parents est mise à jour pour tous les nœuds adjacents à C pas encore dans l’arbre. On sélectionne parmi les nœuds restants celui relié par l’arête de plus petit poids. A B C D E intree T F distance 6 4 2 parent -1 19/7/2006 Algorithmes de graphes

Arbre couvrant minimum d b 2 4 5 9 6 Le nœud de départ est E. La table des distances et des parents est mise à jour pour tous les nœuds adjacents à E pas encore dans l’arbre. On sélectionne parmi les nœuds restants celui relié par l’arête de plus petit poids. A B C D E intree T F distance 5 4 2 parent -1 19/7/2006 Algorithmes de graphes

Arbre couvrant minimum Plus rien ne change. La table parent nous fournit l’arbre de couvrant minimum! a c e d b 2 4 5 9 6 a c e d b 2 4 5 9 6 A B C D E intree T distance 5 4 2 parent -1 19/7/2006 Algorithmes de graphes

Arbre couvrant minimum FOR i := 0 TO g.nvertices-1 DO BEGIN intree[i] := false; distance[i] := MAXINT; parent[i] := -1 END; distance[start] := 0; v := start; WHILE NOT intree[v] DO intree[v] := true; FOR i := 0 TO g.degree[v]-1 DO w := g.edges[v][i].v; weight := g.edges[v][i].weight; IF (distance[w] > weight) AND NOT intree[w] THEN BEGIN distance[w] := weight; parent[w] := v END v := start; dist := MAXINT; FOR i := 0 TO g.nvertices-1 DO BEGIN IF (NOT intree[i]) AND (dist > distance[i]) THEN BEGIN dist := distance[i]; v := i END 19/7/2006 Algorithmes de graphes

Algorithmes de plus court chemin Soit un graphe orienté ou non ayant des étiquettes sur les arêtes pour représenter leur « longueur ». On veut connaître la « distance » minimale entre deux sommets. En général, la distance minimale d’un sommet u au sommet v est la distance minimum de tous les chemins de u à v. 19/7/2006 Algorithmes de graphes

Algorithme de Dijkstra C’est l’algorithme de choix pour trouver le chemin de distance minimum entre deux nœuds d’un graphe. Cet algorithme calcule le plus court chemin entre un nœud donné et tous les autres d’un graphe. Ne fonctionne que sur des graphes sans arêtes négatives. 19/7/2006 Algorithmes de graphes

Algorithme de Dijkstra L’idée de base est très semblable à l’algorithme de Prim. À chaque itération, on ajoute un nœud à l’arbre de nœuds pour lequel nous connaissons le plus court chemin depuis la source s. 19/7/2006 Algorithmes de graphes

Algorithme de Dijkstra Mais dans le problème du plus court chemin : nous ajoutons un nœud qui est le plus proche en distance de la source s Cette distance est fonction du poids de la nouvelle arête et de la distance depuis la source s de l’arbre de nœuds auquel l’arête est adjacente. 19/7/2006 Algorithmes de graphes

Algorithme de Dijkstra 10 5 2 1 3 4 6 9 7 s u v x y 8 Single Source Shortest Path Problem 19/7/2006 Algorithmes de graphes

Algorithme de Dijkstra 5 10 2 1 3 4 6 9 7 s u v x y 8 (s,x) est le plus court chemin utilisant une seule arête. C’est aussi le plus court chemin de s à x. 19/7/2006 Algorithmes de graphes

Algorithme de Dijkstra 7 14 5 8 10 2 1 3 4 6 9 s u v x y 19/7/2006 Algorithmes de graphes

Algorithme de Dijkstra 7 13 5 8 10 2 1 3 4 6 9 s u v x y 19/7/2006 Algorithmes de graphes

Algorithme de Dijkstra 7 9 5 8 10 2 1 3 4 6 s u v x y 19/7/2006 Algorithmes de graphes

Algorithme de Dijkstra 7 9 5 8 10 2 1 3 4 6 s u v x y 19/7/2006 Algorithmes de graphes

Algorithme de Dijkstra BEGIN FOR i := 0 TO g.nvertices-1 DO intree[i] := false; distance[i] := inf; parent[i] := -1 END; distance[start] := 0; v := start; WHILE NOT intree[v] DO intree[v] := true; FOR i := 0 TO g.degree[v]-1 DO w := g.edges[v][i].v; weight := g.edges[v][i].weight; IF (distance[w] > distance[v]+weight) AND NOT intree[w] THEN BEGIN distance[w] := distance[v]+weight; parent[w] := v END v := 0; dist := MAXINT; FOR i := 0 TO g.nvertices-1 DO BEGIN IF (NOT intree[i]) AND (dist > distance[i]) THEN BEGIN dist := distance[i]; v := i END END; print_shortest_paths(g,0) 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Algorithme de Floyd Trouver tous les plus courts chemins entre toutes les paires de nœuds d’un graphe. Le graphe peut contenir des arêtes négatives, mais pas de cycle à coût négatif 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Algorithme de Floyd Représentation du graphe : Une matrice de poids W(i,j)=0 si i=j W(i,j)=¥ s’il n’y a pas d’arête entre i et j W(i,j) = “poids de l’arête” 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Algorithme de Floyd v1 v2 v3 v4 v5 3 2 4 1 9 5 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Algorithme de Floyd Comment définir la distance la plus courte di,j en termes de problèmes plus “petits”? Une façon de faire consiste à se limiter à des chemins n’incluant que des nœuds d’un sous-ensemble restreint. 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Algorithme de Floyd Initialement, ce sous-ensemble est vide. Ensuite il est augmenté progressivement, un nœud à la fois, jusqu’à ce qu’il contienne tous les nœuds du graphe. 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Algorithme de Floyd Soit D(k)[i,j]=poids du plus court chemin de vi à vj n’utilisant que les nœuds {v1,v2,…,vk} comme nœuds intermédiaires dans le chemin D(0)=W D(n)=D c’est la matrice finale Comment calculer D(k) depuis D(k-1) ? 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Algorithme de Floyd Cas 1: Un plus court chemin de vi à vj limité aux nœuds {v1,v2,…,vk} comme nœuds intermédiaires n’utilise pas vk. Alors D(k)[i,j]= D(k-1)[i,j]. Cas 2: Un plus court chemin de vi à vj limité aux nœuds {v1,v2,…,vk} comme nœuds intermédiaires utilise vk. Alors D(k)[i,j]= D(k-1)[i,k]+ D(k-1)[k,j]. Plus court chemin utilisant les nœuds {V1, . . . Vk } Vk Vj Vi Plus court chemin utilisant les nœuds { V1, . . . Vk -1 } 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Algorithme de Floyd Comme D(k)[i,j]= D(k-1)[i,j] or D(k)[i,j]= D(k-1)[i,k]+ D(k-1)[k,j]. On obtient: D(k)[i,j]= min{ D(k-1)[i,j], D(k-1)[i,k]+ D(k-1)[k,j] } Plus court chemin utilisant les nœuds {V1, . . . Vk } Vk Vj Vi Plus court chemin utilisant les nœuds { V1, . . . Vk -1 } 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Algorithme de Floyd W = D0 = 4 5 2  -3 1 3 1 2 3 5 -3 4 1 2 3 P = 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Algorithme de Floyd 4 5 2 7  -3 1 3 K = 1 Le nœud 1 peut être nœud intermédiaire. D1 = D1[2,3] = min( D0[2,3], D0[2,1]+D0[1,3] ) = min (, 7) = 7 D1[3,2] = min( D0[3,2], D0[3,1]+D0[1,2] ) = min (-3,) = -3 1 2 3 P = 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Algorithme de Floyd 4 5 2 7 -1 -3 1 3 K = 2 Les nœuds 1 et 2 peuvent être nœuds intermédiaires. D2 = D2[1,3] = min( D1[1,3], D1[1,2]+D1[2,3] ) = min (5, 4+7) = 5 D2[3,1] = min( D1[3,1], D1[3,2]+D1[2,1] ) = min (, -3+2) = -1 1 2 3 P = 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Algorithme de Floyd 2 5 7 -1 -3 1 3 K = 3 Les nœuds 1, 2, 3 peuvent être nœuds intermédiaires. D3 = D3[1,2] = min(D2[1,2], D2[1,3]+D2[3,2] ) = min (4, 5+(-3)) = 2 D3[2,1] = min(D2[2,1], D2[2,3]+D2[3,1] ) = min (2, 7+ (-1)) 3 1 2 P = 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Algorithme de Floyd 1. D  W // initialiser D avec les poids des arêtes 2. P  0 // initialiser P à 0 3. for k  1 to n 4. do for i  1 to n 5. do for j  1 to n 6. if (D[ i, j ] > D[ i, k ] + D[ k, j ] ) 7. then D[ i, j ]  D[ i, k ] + D[ k, j ] 8. P[ i, j ]  k; 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Algorithme de Floyd Pourquoi peut-on travailler sur une même matrice ? D[i,j] ne dépend que des éléments de la kième ligne et kième colonne de la matrice. La kième ligne et kième colonne de la matrice restent inchangées lorsqu’on calcule Dk 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Algorithme de Floyd Les éléments de la diagonale principale restent à 0 car : D(k)[ j,j ] = min{ D(k-1)[ j,j ] , D(k-1)[ j,k ] + D(k-1)[ k,j ] } = min{ 0, D(k-1)[ j,k ] + D(k-1)[ k,j ] } = 0 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Algorithme de Floyd La kième colonne de Dk est égale à la kième colonne de Dk-1 : Pour tout i D(k)[i,k] = min{ D(k-1)[i,k], D(k-1)[i,k]+ D(k-1)[k,k] } = min { D(k-1)[i,k], D(k-1)[i,k]+0 } = D(k-1)[i,k] 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Algorithme de Floyd La kième ligne de Dk est égale à la kième ligne de Dk-1 : Pour tout i D(k)[k,j] = min{ D(k-1)[k,j], D(k-1)[k,k]+ D(k-1)[k,j] } = min{ D(k-1)[ k,j ], 0+D(k-1)[k,j ] } = D(k-1)[ k,j ] 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Algorithme de Floyd FOR k := 1 TO g.nvertices DO FOR i := 1 TO g.nvertices DO FOR j := 1 TO g.nvertices DO BEGIN through_k := g.weight[i,k]+g.weight[k,j]; IF through_k < g.weight[i,j] THEN BEGIN g.weight[i,j] := through_k; p[i,j] := k END 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Problème 10034 In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to form a picture of the Liberty Bell. Alas, one of the freckles turns out to be a scar, so his Ripley's engagement falls through. Consider Dick's back to be a plane with freckles at various (x,y) locations. Your job is to tell Richie how to connect the dots so as to minimize the amount of ink used. Richie connects the dots by drawing straight lines between pairs, possibly lifting the pen between lines. When Richie is done there must be a sequence of connected lines from any freckle to any other freckle. 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Problème 10034 Input The input begins with a single positive integer on a line by itself indicating the number of the cases following, each of them as described below. This line is followed by a blank line, and there is also a blank line between two consecutive inputs. The first line contains 0 < n <= 100, the number of freckles on Dick's back. For each freckle, a line follows; each following line contains two real numbers indicating the (x,y) coordinates of the freckle. Output For each test case, the output must follow the description below. The outputs of two consecutive cases will be separated by a blank line. Your program prints a single real number to two decimal places: the minimum total length of ink lines that can connect all the freckles. 19/7/2006 Algorithmes de graphes

Algorithmes de graphes Problème 10034 Sample Input 1 3 1.0 1.0 2.0 2.0 2.0 4.0 Sample Output 3.41 19/7/2006 Algorithmes de graphes