Algorithmes pour les graphes



Documents pareils
Chapitre 5 : Flot maximal dans un graphe

Plus courts chemins, programmation dynamique

Les structures de données. Rajae El Ouazzani

LE PROBLEME DU PLUS COURT CHEMIN

Programmation linéaire

Quelques Algorithmes simples

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

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

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

L exclusion mutuelle distribuée

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

Algorithmes de recherche

Chp. 4. Minimisation d une fonction d une variable

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

Baccalauréat ES/L Métropole La Réunion 13 septembre 2013 Corrigé

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

ARBRES BINAIRES DE RECHERCHE

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

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

INF601 : Algorithme et Structure de données

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

REALISATION d'un. ORDONNANCEUR à ECHEANCES

MIS 102 Initiation à l Informatique

Programmation Objet - Cours II

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

Université de Strasbourg UFR de Mathématique et d'informatique. L2 Informatique Semestres S3 et S4. Structures de Données et Algorithmes 1 et 2

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

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

Développement décimal d un réel

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Intégration et probabilités TD1 Espaces mesurés

Algorithmes de recherche d itinéraires en transport multimodal

Architecture des Systèmes d Information Architecture des Systèmes d Information

TP3 : Manipulation et implantation de systèmes de fichiers 1

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Baccalauréat ES/L Amérique du Sud 21 novembre 2013

Structure fonctionnelle d un SGBD

La mesure de Lebesgue sur la droite réelle

Fonctions de plusieurs variables

Recherche dans un tableau

Licence Sciences et Technologies Examen janvier 2010

Les arbres binaires de recherche

Théorie et codage de l information

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

Problèmes de dénombrement.

Resolution limit in community detection

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

Continuité et dérivabilité d une fonction


Cercle trigonométrique et mesures d angles

Info0804. Cours 6. Optimisation combinatoire : Applications et compléments

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


Programmation linéaire

Algorithme. Table des matières

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

chapitre 4 Nombres de Catalan

Première partie. Préliminaires : noyaux itérés. MPSI B 6 juin 2015

Probabilités Loi binomiale Exercices corrigés

Programmation Par Contraintes

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

Université Bordeaux 1, Licence Semestre 3 - Algorithmes et struct...

Transmission d informations sur le réseau électrique

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

Algorithmique, Structures de données et langage C

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Algorithmique et Programmation

Formats d images. 1 Introduction

Théorie et Codage de l Information (IF01) exercices Paul Honeine Université de technologie de Troyes France

Intégration et probabilités TD1 Espaces mesurés Corrigé

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Cours de Recherche Opérationnelle IUT d Orsay. Nicolas M. THIÉRY. address: Nicolas.Thiery@u-psud.fr URL:

Génie Logiciel avec Ada. 4 février 2013

Objectifs du cours d aujourd hui. Informatique II : Cours d introduction à l informatique et à la programmation objet. Complexité d un problème (2)

Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications

Big Data et Graphes : Quelques pistes de recherche

d algorithmique D. Beauquier, J. Berstel, Ph. Chrétienne

Par : Abdel YEZZA, Ph.D. Date : avril 2011 / mise à jour oct (ajout de la section 3 et augmentation de la section 1)

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

BACCALAUREAT GENERAL MATHÉMATIQUES

Algorithmique, graphes et programmation dynamique Notes de Cours Rapport de Travaux Pratiques. Laurent Canet

Une nouvelle approche de détection de communautés dans les réseaux sociaux

Représentation d un entier en base b

Annexe 6. Notions d ordonnancement.

Correction TD algorithmique

Cours de Master Recherche

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

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

Algorithmique et Programmation, IMA

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

4 Exemples de problèmes MapReduce incrémentaux

Algorithmes d'apprentissage

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

1 Définition et premières propriétés des congruences

3 Approximation de solutions d équations

Représentation des Nombres

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Introduction à l étude des Corps Finis

Transcription:

Algorithmes pour les graphes 1 Définitions Un graphe est représenté par : V : L ensemble des noeuds ou sommets. E : L ensemble des arcs ou arrêtes. E est un sous-ensemble de V xv. On note G = (V, E). Si G est connecté, alors E V 1. 2 Structures de Données Dans cette partie, nous allons étudier les structures de données permettant de représenter des graphes. 2.1 Matrice d adjacence C est une matrice définie comme suit : { A i,j = 1 si (i, j) E A i,j = 0 si (i, j) / E C est une structure facile à utiliser, qui convient aux graphes denses, c est à dire lorsque E approche O( V 2 ). L inconvénient majeur est la consommation de mémoire quelque soit le graphe, puisqu il faut une taille en O( V 2 ). 2.2 Liste d adjacence On utilise un tableau de V listes. Pour chaque sommet v, on stocke Adj(v). Cette structure convient aux graphes peu denses, et la quantité de mémoire utilisée est O( V + E ). Toutefois, en contrepartie, sa mise en oeuvre n est pas aisée.

2.3 Matrice d incidence Il s agit d une matrice de taille E V. Une entrée b i,j de cette matrice vaut soit 0, soit 1 si l arc commence en j, et -1 si l arc se termine en j. La mise en oeuvre est très facile, mais la mémoire utilisée est O(V 3 ). 3 Arbre de recouvrement minimum ou Minimum Spanning Tree (MST). Soit G = (V, E), un graphe indirect pondéré. Un arbre de recouvrement est un arbre qui contient tous les sommets de G. Exemple : L arbre de recouvrement minimum obtenu donne : Un arbre de recouvrement minimum cherche à minimiser : w(t ) = w(u, v) u,v V

3.1 Algorithme de Kruskal En entrée : le graphe G En sortie : L entrée T Etape 1 : T est initialisé à Vide. On trie les arbres de G en ordre croissant selon leur poids dans une liste L. Etape 2 : On sélectionne le premier arc de L et on l inclut dans T. Etape 3 : Si tous les arcs de L on été examinés Alors Retourner "Graphe non connecté" Sinon On prend le premier arc non examiné de L S il se forme un égal dans T On l ajoute à T et on va à l étape 4. Sinon On supprime cet arc de L et on recommence l étape 3 Etape 4 : On arrète le traitement si T a (n 1) arcs, sinon on retourne à l étape 3. Le coût de cet algorithme sera étudié en TD. 3.2 Algorithme de Prim En entrée : G En sortie : T Etape 1 : On sélectionne un sommet quelconque de V et on l insére dans T. Etape 2 : Soit S l ensemble de sommets de T. Si les deux ensembles S et (V S) sont connectés alors on renvoie Graphe non convexe. On cherche un arc de poids minimum connectant S et (V S) s ils ne forment pas un cycle dans T, on l insére dans T et on va à l étape 3. Etape 3 : Si T a n 1 arcs on retourne T. Sinon, on retourne à l étape 2. La encore, se réferrer au TD correspondant pour l analyse du coût. 3.3 Parcours en largeur Le P.L. est la base de nombreux algorithmes importants sur les graphes. Dijkstra pour le calcul de plus court chemin a pour origine unique Prim afin de déterminer l arbre de recouvrement minimum.

Principes : Etant donné un graphe G = (S, A), et une origine s. Le P.L. emprunte systématiquement les arcs G pour découvrir tous les sommets accessibles depuis s. Il calcule la distance entre s et tous les sommets accessibles. Il construit également une arborescence de P.L. de racine s. L algorithme de P.L. découvre d abord tous les sommets situés à une distance k de s, avant de découvrir tous les sommets situés à la distance k + 1. Le P.L. colorie chaque sommet en blanc, gris ou noir. Tous les sommets sont blancs au départ. Un sommet est découvert la première fois qu il est rencontré au cours de la recherche. Les sommets gris ou noirs ont été déjà découverts. Si (U, V ) A et si le sommet U est noir alors le sommet V est gris ou noir. Les sommets gris peuvent avoir des sommets adjacents blancs. c est ma frp,toère entre les sommets découverts et les sommets non découverts. Algorithme : Pour chaque sommet u dans S[G] Faire couleur[u] <- blanc j[u] <- infini p[u] <- NULL s <- gris j[s] <- 0 p[s] <- NULL Tant que F!= 0 Faire u <- tete[p] Pour chaque v dans Adj(u) Faire Si couleur[v] <- gris Alors d[v] <- d[u] + 1 p[v] <- u Finsi FinTantQue Enfile(F,V) Defile(F) 3.4 Parcours en profondeur C est un algorithme de recherche qui progresse à partir d un sommet S en s appelant récursivement pour chaque sommet voisin de S. Le nom d algorithme en profondeur est du au fait que, contrairement à l algorithme de parcours en

largeur, il explore en fait à fond les chemins un par un : pour chaque sommet, il prend le premier sommet voisin jusqu à ce qu un sommet n aie plus de voisins (ou que tout ses voisins soient marqués), et revient alors au sommet père. Si G n est pas un arbre, l algorithme pourrait tourner indéfiniment, c est pour cela que l on doit en outre marquer chaque sommet déjà parcouru, et ne parcourir que les sommets non encore marqués. Enfin, on notera qu il est tout à fait possible de l implémenter itérativement à l aide d une pile LIFO contenant les sommets à explorer : on dépile un sommet et on empile ses voisins non encore explorés. Code de l algorithme : DFS (graphe G, sommet s): { Marquer(S); Debut PourTout éléments fils de Voisin(s) Faire Si NonMarqué(sfils) Alors DFS(G,sfils); FinSi Fin } 3.5 Algorithme de Dijkstra Cet algorithme resoud le problème de la recherche d un plus court chemin à origine unique pour un graphe orienté pondéré G(S, A) dans le cas où tous les arcs sont de poids positifs ou nuls. L algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finales de plus court chemin à partir de l origine s ont été calculées. A chaque itération, l algorithme choisit le sommet dont l estimation de plus court chemin est minimale. Détail de l algorithme : Les poids de tous les sommets sont initialiés à Les sommets sont mis à blanc Les prédecesseurs sont mis à NULL File d attente priorité F. Le poids du sommet u initial est mis à 0. Ajouter u à f. TantQue F!= 0 Faire u = sortir le premier sommet de F mettre u à noir

Pour Tous les successeurs s de u Faire mise à jour du poids du sommet d arrivée Si le sommet s n est pas dans F Ajouter s dans F FinSi FinTantQue 3.6 Algorithme de Bellman-Ford Cet algorithme permet de résoudre le problème des plus courts chemins à origine unique dans le cas général où les arcs peuvent avoir un poids négatif. Principe : Soit G = (S, A) un graphe orienté pondéré. soit w : A R, fonction de pondération et s une origine. L algorithme utilise la technique de relachement diminuant progressivement une estimation d[v] du poids d un plus court chemin depuis l origine s vers chaque sommet v s[g] jusqu à atteindre la valeur réelle du poids de plus court chemin S(s, V ). L algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit de longueur strictement négatif accessible depuis l origine. Code : initialisation ( G, s) // les poids de tous les sommets sont mis à +infini // le poid du sommet initial à 0 ; pour i=1 jusqu à Nombre de sommets -1 faire pour chaque arc (u, v) du graphe faire paux := poids(u) + poids(arc(u, v)); si paux <poids(v) alors pred(v) := u ; poids(v) := paux; pour chaque arc (u, v) du graphe faire si poids(u) + poids(arc(u, v)) <poids(v) alors retourner faux retourner vrai

4 Analyse des algorithmes 4.1 Parcours en largeur (Breadth First Search) Nous avons réutilisé une queue de priorité FIFO. Les opérations d enfilage et de défilage coûtent O(1). Le coût total du parcours entier est linéaire. Remarque : BFS permet de construire un BFSTree, i.e. un arbre de pracours en largeur d abord. Il permet en outre de calculer la plus petite distance séparant le sommet source vers un autre sommet du graphe lorsque celui-ci n est pas pondéré. L algorithme de Dijkstra et de Prim utilisent le même principe. 4.2 Parcours en profondeur (Depth First Search) Nous pouvons utiliser une pile (LIFO) ou un algorithme récursif. Contrairement au BFS, le DFS permet de construire une forêt d arbres de DFS. 4.3 Algorithmes du MST Soit G = (V, E), il s agit de trouver T = (V, E). i.e. : connecte tous les sommets du graphe tout en minimisant le coût w(t). En ce qui ceoncerne L algorithme de Kruskal, cela dépend de la structure de données utilisée et des coûts associés aux opérations de base, et du graphe (s il comporte des ensembles disjoints). Pour Prim, le coût de l algorithme dépend de la S.D. implémentant le graphe (soit un tableau, soit un tas binaire, soit un tas de Fibonacci). S il s agit d un tas binaire, le coût est O(E log(v )).