Plan. Composantes fortement connexes d'un graphe. Algorithme de Roy-Warshall. Algorithme de Floyd

Documents pareils
Plus courts chemins, programmation dynamique

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

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

Atelier Transversal AT11. Activité «Fourmis» Pierre Chauvet.

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

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Resolution limit in community detection

Algorithmes de recherche

CH.6 Propriétés des langages non contextuels

Les arbres binaires de recherche

Chapitre 5 : Flot maximal dans un graphe

Structures algébriques

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Les structures de données. Rajae El Ouazzani

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Premiers exercices d Algèbre. Anne-Marie Simon

UE C avancé cours 1: introduction et révisions

Jean-Philippe Préaux

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

LE PROBLEME DU PLUS COURT CHEMIN

Programmation linéaire

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

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

Limites finies en un point

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

Java Licence Professionnelle CISII,

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Feuille d exercices 2 : Espaces probabilisés

Programmation C++ (débutant)/instructions for, while et do...while

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

Projet ISN - dossier réalisé par Randrianarimanana Stéphanie. Titre du projet : Site de rencontre. le nom de notre site de rencontre : Linkymeet

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

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Pourquoi l apprentissage?

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

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

Cours 02 : Problème général de la programmation linéaire

Programme Compte bancaire (code)

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Ordonnancement. N: nains de jardin. X: peinture extérieure. E: électricité T: toit. M: murs. F: fondations CHAPTER 1

Chp. 4. Minimisation d une fonction d une variable

I. Introduction aux fonctions : les fonctions standards

Algorithmique, Structures de données et langage C

Rappels et compléments, première partie : Nombres complexes et applications à la géométrie

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Généralités sur le Langage Java et éléments syntaxiques.

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

De l automatisme à la domotique...

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Projet de programmation (IK3) : TP n 1 Correction

MIS 102 Initiation à l Informatique

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

Conception des systèmes répartis

Intégration de la dimension sémantique dans les réseaux sociaux

Optimisation Discrète

Introduction a l'algorithmique des objets partages. Robert Cori. Antoine Petit. Lifac, ENS Cachan, Cachan Cedex. Resume

Algorithmique avec Algobox

Recherche dans un tableau

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

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

Licence Sciences et Technologies Examen janvier 2010

supérieure Vous ne connaissez pas le numéro de version de votre application?

Examen Médian - 1 heure 30

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

Initiation à la programmation en Python

Architecture des ordinateurs

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

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.


Solutions du chapitre 4

Application 1- VBA : Test de comportements d'investissements

TD3: tableaux avancées, première classe et chaînes

Démontrer qu'un point est le milieu d'un segment

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

Tableau d alarme sonore

chapitre 4 Nombres de Catalan

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

Méthodes de quadrature. Polytech Paris-UPMC. - p. 1/48

ACTIVITÉ DE PROGRAMMATION

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

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

TD/TP PAC - Programmation n 3


1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

SIMULATEUR DE MARCHE FINANCIER

Calcul intégral élémentaire en plusieurs variables

Algorithmes d'apprentissage

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

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Test de logiciel dans les méthodes agiles

Utilisation d objets : String et ArrayList

Continuité et dérivabilité d une fonction

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

Transcription:

Plan X, X, Petite classe 95 Composantes fortement connexes d'un graphe Algorithme de Roy-Warshall Algorithme de Floyd

Composantes fortement connexes Soit G un graphe. On pose { il existe un chemin x G y de x à y et de y à x Les classes de cette relation d'équivalence sont les composantes fortement connexes. 6 0 7 9 3 4 5 8 3 4 5

Soit G un graphe et T une arborescence de Trémaux dans G. 6 0 D R R 7 9 D T T 3 4 T 5 8 T 3 4 5 (0) Arcs de T. () Arcs inaccessibles. () Arcs de descente : (x,y) avec y descendant de x. (3) Arcs retour : x descendant de y. (4) Arcs transverses : x non descendant de y et y non descendant de x.

Points d'attache Point d'attache d'un sommet x de T : plus petit y tel qu'il existe un chemin de x à y (éventuellement vide) contenant au plus un arc retour ou transverse. Thm. Si un sommet est égal à son point d'attache at(x), et si pour tout descendant y de x dans T, on a at(y) < y, alors l'ensemble des descendants de x forme une composante fortement connexe. Algorithme : Trouver une composante fortement connexe. La retirer et recommencer.

Calcul des points d'attache 5 6 0 0 D R R 5 7 9 8 D T T 3 4 5 8 T T 5 3 4 5 On trouvera successivement les composantes {}, {0} et {,, 3, 4, 5, 6, 7, 8, 9}.

Définitions X, X, Petite classe 95 Point d'articulation Sommet d'un graphe, qui, si on le supprime, disconnecte le graphe. Pont Arête d'un graphe, qui, si on la supprime, disconnecte le graphe. Composantes -connexes Deux arêtes sont dans la même composante -connexe s'il existe un circuit (simple) les contenant.

Les ponts d'un graphe 8 9 3 7 0 5 6 4 3 Les points d'articulation d'un graphe 8 9 3 7 0 6 5 4 Si on supprime un point d'articulation, le graphe n'est plus connexe 3

-connexité 8 9 3 7 0 5 6 4 3 Les composantes -connexes 8 9 3 7 7 0 6 5 4 Dans une composante -connexe, il existe un circuit entre deux sommets quelconques. 3

Recherche des points d'articulation 8 9 3 7 0 5 6 4 3 Un parcours en profondeur et son arbre. Un sommet s (autre que la racine) n'est pas point d'articulation si chaque fils t de s possède un descendant connecté à un ancêtre de s (par un arc en bleu). La racine est point d'articulation si elle posséde deux fils au moins.

Algorithme en O(n+m) 6 6 3 3 5 7 4 4 5 7 8 8 9 9 8 9 4 0 4 4 0 3 3 0 On effectue un parcours récursif en profondeur (en rouge) en calculant le rang du sommet "retour" le moins élevé (nombre bleu). Les points d'articulation (autre que la racine) sont ceux dont au moins un des fils a les deux nombres égaux.

Algorithme en O(n+m) 6 6 3 3 5 7 4 4 5 7 8 8 9 9 8 9 4 0 4 4 0 3 3 0 Les ponts (en gras) sont les arêtes dont le sommet d'arrivée a les deux nombres égaux : (, ), (7, 8), (0, ), (8, 9).

Relation d'accessibilité (fermeture transitive) Soit S = {,,, n} les sommets. Soit G 0 le graphe initial, complété d'une boucle en chaque sommet. On note G k le graphe (S, A k ) avec (i, j) A k ssi il existe dans G 0 un chemin de i à j dont les sommets internes sont dans {,,, k} Proposition On a (i, j) A k ssi (i, j) A k- ou (i, k) A k- et (k, j) A k- Pour j = k, on trouve (i, k) A k ssi (i, k) A k-

3 0 0 0 0 0 0 0 0 A = 0 0 0 0 0 0 0 0 0 0 4 5 Matrice d'adjacence 0 0 0 0 0 0 A = 0 0 0 0 0 0 A 3 = 0 0 0 0 0 0 0 0 0 0 0 0 A 0 = 0 0 0 0 0 0 0 0 0 0 0 0 A = 0 0 0 0 0 0 A 4 = 0 0 0 0 0 0

Programme X, X, Petite classe 95 void fermeturetransitive() { for (int k = 0; k < n; k++) for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) if (m[i][k] && m[k][j]) m[i][j] = true; } void RoyWarshall() { for (int i = 0; i < n; i++) m[i][i] = true; for (int k = 0; k < n; k++) for (int i = 0; i < n; i++) if (m[i][k]) for (int j = 0; j < n; j++) m[i][j] = m[i][j] (m[i][k] && m[k][j]); } Complexité : O(n 3 )

Justification X, X, Petite classe 95 On suppose qu'à l'étape k, i, j, M[i,j] contient M i,j avant la ligne M[i,j] = M[i,j] (M[i,k] && M[k,j]); Alors M[i, k] contient (k-) M i,k si k j et M i,k si k < j et M[k, j] contient (k-) M k,j si k i et M k,j si k < i D'après la proposition, on aura dans tous les cas : M[i,j] = M i,j or (M i,k and M k,j ) = M i,j (k-) (k) (k) (k-) (k-) (k-) (k)

Complexité X, X, Petite classe 95 Le parcours en profondeur conduit à un algorithme pour la fermeture transitive en O(n(m + n)) (listes) O(n 3 ) (matrices) L'algorithme de Roy-Warshall est en O(n 3 ).

- X, X, Petite classe 95 Chemins de valeur maximale -3 3 4 0 - -3-0 - - - 0 - - - 0 Il s'agit de trouver les chemins élémentaires de valeur maximum. (k) Soit M i,j la valeur maximale des chemins élémentaires de i à j dont les sommets intérieurs sont dans {,,, k}. { M (0) i,j si (i, j) A et i j, M i,j = 0 si i = j, - sinon. (k) (k-) (k-) (k-) M i,j = max {M i,j, M i,k + M k,j }

Algorithme de Floyd en O(n 3 ). public class GrapheMat { int[][] m; int n; /* nombre de sommets */ final static int MOINSINFINI = -0000; int Somme(int x, int y) { if (x == MOINSINFINI y == MOINSINFINI) return MOINSINFINI; return(x + y); } void Floyd() { for (int i = 0; i < n; i++) m[i][i] = 0; for (int k = 0; k < n; k++) for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) m[i][j] = Math.max(m[i][j], Somme(m[i][k], m[k][j])); }

Résultat 0 * * * * 0 * * A 0 = -3 * 0 * * * 0-4 * * * 3 0 0 3 * * * 0 * * A = -3-0 * * * 0-4 * * * 3 0-3 3-4 4 5 3 0 3 5 4-0 4 3 A 4 = -3-0 * * * 0-4 * * * 3 0 X, X, Petite classe 95 0 * * * * 0 * * A = -3-0 * * * 0-4 * * * 3 0 0 3 5 4-0 4 3 A 3 = -3-0 * * * 0-4 * * * 3 0 0 3 7 4-0 6 3 A 5 = -3-0 4 * * * 0-4 * * * 3 0

3 3 4 X, X, Petite classe 95 Plus court chemin 0 + 3 + 0 + + 0 + - + 0 Il s'agit de trouver les chemins les plus courts. (k) Soit M i,j la valeur maximale des chemins élémentaires de i à j dont les sommets intérieurs sont dans {,,, k}. { M (0) i,j si (i, j) A et i j, M i,j = 0 si i = j, + sinon. (k) (k-) (k-) (k-) M i,j = min {M i,j, M i,k + M k,j }

Plus court chemin final static int PLUSINFINI = 000000000; void PlusCourtChemin() { for (int i = 0; i < n; i++) m[i][i] = 0; for (int k = 0; k < n; k++) for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) m[i][j] = Math.min(m[i][j], Somme(m[i][k], m[k][j])); } int Somme(int x, int y) { if (x == PLUSINFINI y == PLUSINFINI) return PLUSINFINI; return(x + y); } L'algorithme est en O(n 3 ).

3 Résultat 0 * 3 * * 0 * * A 0 = 3 * 0 4 * * * 0 * * * 0 0 3 3 * * 0 * * A = 3 4 0 4 * * * 0 * * * 0 0 3 3 4 5 0 6 3 A 4 = 3 4 0 4 * * * 0 * * * 0 3 3 4 4 5 X, X, Petite classe 95 0 * 3 * * 0 * * A = 3 4 0 4 * * * 0 * * * 0 0 3 3 4 5 0 6 3 A 3 = 3 4 0 4 * * * 0 * * * 0 0 3 3 4 5 0 5 3 A 5 = 3 4 0 3 * * * 0 * * * 0

Semi-anneau Ensemble k muni de deux opérations associatives, + et, et de deux éléments distingués 0 et, tels que () (k, +, 0) est un monoïde commutatif : l'addition est commutative et admet 0 comme élément neutre. () (k,, ) est un monoïde : la multiplication admet comme élément neutre (3) distributivité : a,b,c k (a + b) c = a c + b c et c (a + b) = c a + c b (4) 0 est absorbant. Pour tout a k, 0 a = a 0 = 0

Exemples de semi-anneaux () Tous les anneaux. () (N {+ }, min, +, +, 0) (3) (N {-, + }, max, +, -, 0) avec (- ) + (+ ) = (+ ) (4) (N {-, + }, min, max, {+ }, {- }) (5) ({Vrai, Faux}, OU, ET) (6) (P(E),, ) (7) Les matrices carrées de dimension n sur un semi-anneau

Semi-anneau complet Semi-anneau dans lequel on peut définir des sommes infinies que l'on peut manipuler comme des sommes finies (associativité et distributivité comprises). (On peut donner une définition plus rigoureuse!) Soit a un élément d'un semianneau complet. On pose a* = + a + a +... + a k +... Exemples. Dans (N, min, +) a* = min(0, a, a,...) = 0 Dans (N {-, + }, max, +) a* = max(0, a, a,...) = + si a > 0

Soit M une matrice n n à coefficients dans un semi-anneau idempotent complet. On pose M* = I + M + M +... + M k +... Algorithme (Jordan). Notons M (0),..., M (n) les matrices définies par M (0) = I + A et, pour k n (k) (k-) (k-) (k-) (k-) M i,j = M i,j + M i,k (M k,k )* M k,j Alors M* = M (k) Exemple : dans le semi-anneau (N, min, +), la formule devient (k) (k-) (k-) (k-) M i,j = min(m i,j, M i,k + M k,j )