traverse et calculs dans arbres exemple: graphes de...

8
Pimp A - info121A Programmation IMPérative Avancée Frédéric Vernier inspiré du cours de Burkhart Wolff Programme Tri Récursivité Dichotomie Arbre Graphes Examen blanc xxx yyy Traverse et Calculs dans Arbres Graphes omniprésent ! Exemples Représentations de graphes Parcours et Calculs etc. Exemple: Graphes de Réseaux Réseau de transport Stations (+type) Connexions Routes

Upload: others

Post on 10-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Traverse et Calculs dans Arbres Exemple: Graphes de Réseauxvernier.frederic.free.fr/Teaching/PimpA/cours/5/slidesCours5.fred.pdf · Résumé Graphes sont une structure de donnée

Pimp A - info121AProgrammation IMPérative Avancée

Frédéric Vernier

inspiré du cours de Burkhart Wolff

Programme

TriRécursivitéDichotomieArbreGraphes Examen blanc

xxxyyy

Traverse et Calculs dans Arbres

Graphes omniprésent !ExemplesReprésentations de graphesParcours et Calculsetc.

Exemple: Graphes de Réseaux

Réseau de transport Stations (+type)ConnexionsRoutes

Page 2: Traverse et Calculs dans Arbres Exemple: Graphes de Réseauxvernier.frederic.free.fr/Teaching/PimpA/cours/5/slidesCours5.fred.pdf · Résumé Graphes sont une structure de donnée

Exemple: Graphes

Réseau sociaux(mais qui te like?)

Exemple: Recherche Labyrinthe

La recherche d’unesortie d’un labyrinthe …

Exemple: Recherche Labyrinthe

Recherche d’unesortie = arbre

ensemble deschemins = graphe

Exemple: Configurations en Jeux

n queenspeut avoirdes cyclesGraphe implicite

Page 3: Traverse et Calculs dans Arbres Exemple: Graphes de Réseauxvernier.frederic.free.fr/Teaching/PimpA/cours/5/slidesCours5.fred.pdf · Résumé Graphes sont une structure de donnée

Graphes : Définition

… consistent d’un ensemble de sommets (noeuds) V et de liens entre eux, des arêtes (arcs) E entre eux, i.e. un ensemblede paires entre les V.

… peuvent être

orientés (E non-symétrique)

ou non-orientés (E symétrique)

… peuvent avoir (en plus des arbres):

boucles ([4,5,2,3]),

sommets avec plusieurs “pères” (2)

Graphs : Definitions

… peuvent avoir:

cas: orientés- in-degré (example: 2) - out-degré (example: 2)

cas non-orientés - degré (example: 2)

des attributs sur des sommets (ex.: “graph coloré”)

des attributs sur des arêtes (ex.: “graph pondéré”)

Graphe : Représentation

Représentation de Graphes: G = (V,E) ou V = {1,2,3,4,5,6} E = {(6,4),(4,3),(4,5),(5,2),(5,1),(2,1), (4,6),(3,4),(5,4),(2,5),(1,5),(1,2)}

Et, bien sur, une représentation par référence (position dans tableaux):

[[2,5], [5,1], [2,4], [3,5,6], [1,2,4], [4]]

… ou par une fonction:vector<ref> voisins(<ref>)

Graphe : Représentation

Page 4: Traverse et Calculs dans Arbres Exemple: Graphes de Réseauxvernier.frederic.free.fr/Teaching/PimpA/cours/5/slidesCours5.fred.pdf · Résumé Graphes sont une structure de donnée

Différentes formes de graphes et de problèmes … [Wikipedia]

Route problems !•!Hamiltonian path and cycle problems !•!Minimum spanning tree !•!Route inspection problem

(also called the "Chinese Postman Problem") !•!Seven Bridges of Königsberg !•!Shortest path problem !•!Steiner tree !•!Three-cottage problem !•!Traveling salesman problem (NP-hard)

Exemple de problème Exemple de problème

Problème du chemin Hamiltonien:(pour des graphes orientés et non-orientés):

… trouver un chemin quipasse par tous les sommetsexactement une fois.

… n’existe pas dans tousles graphes.

Certaines Graph-Problèmes

Problème du voyageur de commerce:pour un graphe pondéré G = (V, A, !)

typiquement non-orienté, mais …

visiter chaque sommet qu’une seule fois (sauf le départ et fin, qui sont égaux)

minimiser le cout du chemin

problème d’optimisation récurrent et complexe (NP)

Autre exemple

graphe pondéré:Arbre couvrant de poids minimal(angl: Minimumspanning tree)

sommets tous liés

poids minimal

Page 5: Traverse et Calculs dans Arbres Exemple: Graphes de Réseauxvernier.frederic.free.fr/Teaching/PimpA/cours/5/slidesCours5.fred.pdf · Résumé Graphes sont une structure de donnée

Graphes & Arbres

Arbres faciles à explorer par desalgorithmes récursivesIdée: explorer les graphes par construction de sous-arbres …… marquer les sommets déjà visitées …

marquer(A)

de-marquer(A)

est-marqué(A)

Graphs vs. Arbres: Marquages

✓✓✓

✓✓✓

✓✓✓

✓✓✓

✓✓

✓✓✓

✓✓✓

✓ ✓

✓✓✓

✓✓✓

✓ ✓ ✓

Explicites et implicites Graphs

Comme dans le cas des arbres, les sommets et les arrêtes peuvent être

explicitement représentés(métro, shortest path navigation …)

implicitement représentés:(jeux, labyrinthes … )

vector<ref> voisins(sommets S)

visiter(S, op)

Schéma de parcours d’arbres

Parcours en profondeur (depth-first)Variante: Parcours Postfixe.(Variantes infixe et prefixe analog arbres)

void visiterGraph(Sommet A){ marquer(A) foreach(Sommet S : voisins(A)) if(nonMarque(S)) visiterGraph(S); visiter(A); de-marquer(A);}

Page 6: Traverse et Calculs dans Arbres Exemple: Graphes de Réseauxvernier.frederic.free.fr/Teaching/PimpA/cours/5/slidesCours5.fred.pdf · Résumé Graphes sont une structure de donnée

Schema evaluation de graphes

Parcours en profondeur (depth-first)Variante : Parcours Postfixe.(Variantes infixe et prefixe analogue aux arbres)

<Res> evalGraph(Sommet A){ marquer(A); foreach(Sommet S : voisins(A)) if(nonMarque(A)) vector<Res> res=evalArete(A,S,evalGraph(S)); de-marquer(A); return eval(A, res); }

code C++

/* Rappel d’un algorithme de recherche: */

char MUR = '#';char VIDE = ' ';char EN_CONSTR = '?';char IMPASSE = '@';char CHEMIN = 'o';

typedef vector<vector<char> > Labyrinthe;Labyrinthe laby;

code C++

/* Rappel d’un algorithme de recherche: */

bool chemin1_r(int x, int y){ //cout << x << "," << y << endl; laby[y][x] = EN_COURS; bool trouve = false; if (x==laby[laby.size()-2].size()-2 && y==laby.size()-2){ laby[y][x] = CHEMIN; return true; } if (laby[y][x+1]==VIDE) trouve=chemin1_r(x+1, y); if (! trouve && laby[y+1][x]==VIDE) trouve=chemin1_r(x,y+1); if (! trouve && laby[y][x-1]==VIDE) trouve=chemin1_r(x-1,y); if (! trouve && laby[y-1][x]==VIDE) trouve=chemin1_r(x,y-1); if (trouve)laby[y][x] = CHEMIN return trouve;}

code C++

/* Rappel d’un algorithme de recherche: */

bool chemin1_r(int x, int y){ laby[y][x] = EN_COURS; bool trouve = false; if (x==laby[laby.size()-2].size()-2 && y==laby.size()-2){ laby[y][x] = CHEMIN; return true; } if (laby[y][x+1]==VIDE) trouve=chemin1_r(x+1, y); if (! trouve && laby[y+1][x]==VIDE) trouve=chemin1_r(x,y+1); if (! trouve && laby[y][x-1]==VIDE) trouve=chemin1_r(x-1,y); if (! trouve && laby[y-1][x]==VIDE) trouve=chemin1_r(x,y-1); if (trouve)laby[y][x] = CHEMIN; return trouve;}

marquer(x,y)

de-marquer(x,y)

le résultat

donc voisin pas marqué

Page 7: Traverse et Calculs dans Arbres Exemple: Graphes de Réseauxvernier.frederic.free.fr/Teaching/PimpA/cours/5/slidesCours5.fred.pdf · Résumé Graphes sont une structure de donnée

Les Sommets: une “configuration”, i.e.un pair de:

l’état du labyrinthe, avecses murs, ses cases encore vides,ses cases déjà visités

la position actuelle: x et y

calculer les voisins de (x,y) :trouver positions voisins qui sont ni déjà visité ni mur ! Graph implicite !!!

Parcours Labyrinthe Parcours de graphes

Intérêt particulier:Parcours en largeur (breadth first)

Rappel:Structure de donné auxiliaire: File <X> (angl: Queue)

First-in-first-out principle (FIFO)

elements clé: operations File<X> FileVide

Parcours de graphes

Schéma d’un parcours en largeur (breadth first)

ParcoursLargeur(Sommet A){ f = FileVide; enfiler(A, f); while (f != FileVide) { nœud = defiler(f); marquer(nœud); Visiter(nœud); //On choisit de faire une opération foreach(S:voisins(nœud) if (non_marque(S)) enfiler(S, f) de-marquer(nœud) } }

Calculs dans graphes

Schéma pour évaluation en largeur …<res> evalLargeur(Sommet A){ File<Pair<Sommet, res_tmp>> f = FileVide; <res> res = initRes() enfiler(A, f); while (f != FileVide) { nœud = defiler(f); marquer(nœud) foreach(S:voisins(nœud) if (non_marque(S)) <res_tmp> res_tmp = eval(nœud, S, res, f) res = update(nœud, S, res, res_tmp) enfiler((S, res_tmp),f) de-marquer(nœud) } return res }

Page 8: Traverse et Calculs dans Arbres Exemple: Graphes de Réseauxvernier.frederic.free.fr/Teaching/PimpA/cours/5/slidesCours5.fred.pdf · Résumé Graphes sont une structure de donnée

Parcours de graphes

Quelle stratégie de parcours estmeilleur pour “find_shortest_path” -

parcours en profondeur parcours en largeur???

Résumé

Graphes sont une structure de donnée (récurrente :-) en informatiqueAlgorithmes efficaces de grand intérêtune approche de leur parcours et utilisation : réduction en arbre (via marqueur)et exploration avec des stratégies connues …