Algorithmique des graphes quelques notes de cours
1 Modi er l'algorithme de parcours en largeur a n de récupérer les composantes connexes du graphe en entrée 2 Appliquer le parcours en largeur à la recherche d'un plus court chemin entre deux som-mets xet ydu graphe G 3 Proposer une version du parcours en largeur où la le a_traiter est simulée à l'aide d'un tableau de néléments
Parcours dun graphe
Parcours en largeur : principe de l’algorithme Vous devez parcourir toutes les pages d’un site web Les pages sont les sommets d’un graphe et un lien entre deux pages est une ar^ete entre ces deux sommets 1 Dans le parcours en largeur, on utilise une le On en le le sommet de d epart (on visite la page index du site)
Algorithmes en Java Chap 5 : Graphes
2 Parcours de graphes Parcours en largeur Parcours en profondeur 3 Fermeture transitive des graphes Algorithme de Warshall 4 Recherche du plus court chemin Algorithme de Ford F Rico, A Rico (UCBL) MASS54 : Graphes 11 novembre 2013 14 / 69
Chapitre 3 : Exploration d’un graphe
Lors d’un parcours en largeur, on applique la r egle "premier marqu e-premier explor e" i e Pour construire les couches, on explore les sommets en respectant l’ordre dans lequel ils ont et e marqu es Chapitre 3 : Exploration d’un graphe - Parcours en largeur (BFS) 12/35
Algorithmique et programmation en Java
19 3 L’implémentation en Java 254 19 3 1 Matrice d’adjacence 256 19 3 2 Listes d’adjacence 258 19 4 Parcours d’un graphe 260 19 4 1 Parcours en profondeur 260 19 4 2 Parcours en largeur 261 19 4 3 Programmation en Java des parcours de graphe 262 19 5 Exemple 263 19 6 Exercices 263
Représentation des graphes et Programmation
Principe du parcours en largeur •On part d’un sommet donné On énumère tous les fils (les suivants) de ce sommet, puis tous les petits-fils non encore énumérés, etc C’est une énumération par génération : les successeurs directs, puis les successeurs au 2e degré, etc
Plan Langage Java • Exceptions Algorithmique • Implantations
Soit F un parcours en largeur à partir de s d'un graphe G Pour chaque sommet v ≠ s, il existe un premier élément v' de F tel que (v', v) soit un arc du graphe Soit G(s) le sous-graphe constitué de ces arcs Proposition (1) G(s) est une arborescence (2) x ∈ G(s) ssi il existe un chemin de s à x
GRAPHES REPRÉSENTATION ET PARCOURS
Le parcours en profondeur d’un graphe avec n sommets et m arêtes finit en temps O(n + m) Preuve On considère chaque arête exactement deux fois (quand on la trouve sur les deux listes d’adjacence), et on colorie chaque sommet exactement trois fois forêt en profondeur : formée par les arêtes de liaison parent
Cours n: Graphes - LIX
Parcours d’arbres Repr esentation des graphes Matrice d’adjacences Liste de successeurs Parcours de graphes Parcours g en erique Parcours en largeur BFS Parcours en profondeur DFS Calcul de distances Algorithme de Bellman-Ford Algorithme de Dijsktra Algorithme de Floyd Warshall 2
[PDF] parcours lecture acces pas cher
[PDF] parcours lecture pdf
[PDF] parcours lecture le petit chaperon rouge
[PDF] parcours lecture acces avis
[PDF] parcours lecture occasion
[PDF] coexistence pacifique cours
[PDF] archives militaire en ligne
[PDF] livret militaire en ligne
[PDF] la coexistence pacifique de 1953 ? 1962 pdf
[PDF] cornière catnic
[PDF] corniere galva pour brique
[PDF] corniere pour linteau brique
[PDF] cornière support briques
[PDF] cornière pour linteau de brique
X, Petite classe 5X, Petite classe 5X, Petite classe 8X, Petite classe 8 Plan
Langage Java
• ExceptionsAlgorithmique
• Implantations d'un graphe • Parcours de graphe X, Petite classe 5X, Petite classe 5X, Petite classe 8X, Petite classe 8Exceptions
Une exception est un objet de la
classe java.lang.Exception (ou de l'une de ses sous-classes) class ExceptionPile extends ExceptionExceptionPile(String m)
System.out.println(m)
Utilisation :
int valeur() throws ExceptionPile if (estVide()) throw new ExceptionPile("Pile vide"); return contenu[hauteur-1]; X, Petite classe 5X, Petite classe 5X, Petite classe 8X, Petite classe 8Exceptions
Effets de la levée d'exception, par
"throws" (1) création d'un objet de la classeExceptionPile
(2) sortie de la méthode en cours (3) recherche dans l'arbre d'appel d'un bloc qui capte l'exceptionPile p = new Pile();
try// Exécution contrôléeSystem.out.println(p.valeur());
catch(ExceptionPile e)System.out.println(m)
X, Petite classe 5X, Petite classe 5X, Petite classe 8X, Petite classe 8Exceptions
Le bloc try lance l'exécution.
Si une erreur se produit pendant
cette exécution, l'éxécution se poursuit dans un bloc catch, avec comme argument e l'objet créé lors de la levée d'exception.Pile p = new Pile();
try// Exécution contrôléeSystem.out.println(p.valeur());
catch(ExceptionPile e)System.out.println(m)
X, Petite classe 5X, Petite classe 5X, Petite classe 8X, Petite classe 8Exceptions
On peut avoir 0, 1 ou plusieurs
blocs catch, qui se comportent comme un case dans un bloc switch. try// Exécution contrôlée readFromFile("monFichier"); catch(FilelNotFoundException e)System.out.println("Pas trouvé !")
catch(IOException e)System.out.println("Erreur d'entrée-
sortie"); catch(Exception e)// Autres erreursSystem.out.println("Erreur");
X, Petite classe 5X, Petite classe 5X, Petite classe 8X, Petite classe 8Finally
On peut rajouter un bloc finally,
qui est exécuté que l'exception soit levée ou pas, même en cas de return, avant que le programme ne quitte le try try// Exécution contrôlée readFromFile("monFichier"); catch { ... } finally// nettoyageRefermer les fichiers, les connections
Internet, etc.
X, Petite classe 5X, Petite classe 5X, Petite classe 8X, Petite classe 8Matrice d'adjacence
M i,j = {010100010010001001010001001000100 si (i, j) G
1 si (i, j) G1
2 34class GrapheMat
int[][] m;// Matrice d'adjacence int n; // nombre de sommetsGrapheMat(int n) {
this.n = n; m = new int[n][n]; X, Petite classe 5X, Petite classe 5X, Petite classe 8X, Petite classe 8Exemple d'utilisation
Thm Soit M la matrice d'adjacence
d'un graphe G. Pour tout n ³ 0, Mi,jest égal au nombre de chemins de longueur n de i à j.n n true s'il existe un chemin de longueur n de i à j false sinon class GrapheMat boolean[][] m;// Matrice d'adjacence int n; // nombre de sommets }Remarque Si M est définie comme matrice booléenne, on a M i,j = { X, Petite classe 5X, Petite classe 5X, Petite classe 8X, Petite classe 8Matrice d'incidence
1si i est l'origine de a
M i,a = {-1si i est l'extrémité de a0sinon
Exercice : montrer que M est
unimodulaire, i. e. le déterminant de toute sous-matrice carrée de M vaut 0, -1 ou 1.(Graphe sans boucle) 1 0 1 0-1 -1 1 0 0 00 0 0-1 1
0-1-1 1 012
3 4123
45
1 2 3 4 5
1 2 3 4 X, Petite classe 5X, Petite classe 5X, Petite classe 8X, Petite classe 8Par récurrence sur la taille n de la
matrice carrée extraite. • Clair pour n = 1 • On développe le calcul du déterminant D n par rapport à une colonne. - Si une colonne est nulle, Dn = 0 - Si une colonne contient un seul coefficient non nul, 1 ou -1, D n = ± Dn-1- Si toutes les colonnes ont deux coefficients non nuls (1 et -1), la somme des colonnes est nulle et D n = 0Solution X, Petite classe 5X, Petite classe 5X, Petite classe 8X, Petite classe 8Liste de successeurs
1 : 24
2 : 4 3 : 34 : 3public class GrapheListe
Liste[] succ;
int n;GrapheListe(int n)
this.n = n; succ = new Liste[n]; }1 2 3 4 X, Petite classe 5X, Petite classe 5X, Petite classe 8X, Petite classe 8Comparaison des tailles
Graphe à n sommets et m arcs.
Matrice d'adjacence : n2
Matrice d'incidence : nm
Liste de successeurs : n + m
X, Petite classe 5X, Petite classe 5X, Petite classe 8X, Petite classe 8Parcours d'un graphe connexe
non orienté à partir d'un sommet sC'est une suite S de sommets t.q.
(1) s est le premier sommet de S (2) Chaque sommet apparaît une fois et une seule dans S (3) Tout sommet sauf la racine est adjacent à un sommet placé avant lui dans la liste.Exemple : 5 3 6 2 1 4 7 est un parcours issu de 51 234 5 67
X, Petite classe 5X, Petite classe 5X, Petite classe 8X, Petite classe 8
On obtient une arborescence de
Trémeaux.
Ici, en partant
de s = 1 :Complexité (n sommets, m arêtes)
O(n + m) avec des listes de
successeurs, O(n2) avec des
matrices d'incidenceParcours en profondeurInitialisation : S = (s)
Si S = (s
1 , ..., sn-1), on prend
pour s n un voisin de sn-1, ou, à défaut, un voisin de s n-2, ou, à défaut, un voisin de s n-3, etc.1 235 6 74
X, Petite classe 5X, Petite classe 5X, Petite classe 8X, Petite classe 8 public class Graphe