Mer de glace

Transcription

Mer de glace
Algorithmes et Applications
(Master 1 Info 2011-2012)
Partie II (Bilel Derbel) :
Algorithmes sur les Graphes et Applications
(arbre recouvrant, coloration, graphe du web)
Cours 1 :
Introduction aux graphes
●
Introduction
✓ Terminologie et notions de bases
✓ Représentations d'un graphe
✓ Dessin à main levée !
●
Parcours et Plus courts chemins
✓ Comment raisonner avec les objets graphes ?
Un peu d'histoire (1/2)
●
Problème des ponts de Konigsberg (kaliningrad) :
‣ Deux îles A et D sur les rives du Pregel reliées entre elles ainsi
qu’aux rivages B et C à l’aide de sept ponts
✓
Question : à partir d'une terre de départ, comment traverser chacun des
ponts une et une seule fois et retourner à son point de départ ?
‣ Euler (1736)
Un peu d'histoire (2/2)
●
Kirchhoff (1824-1887) : développa la théorie des
arbres pour l’appliquer à l'analyse de circuits
électriques
●
Cayley (1821-1895) : découvrit la notion d'arbre
alors qu'il essayait d'énumérer les isomères
saturés des hydrocarbures CnH2n+2
‣ Conjecture des quatre couleurs
‣ Chemins Hamiltonien
‣ Mobius, de Morgan …
●
1936 : premier ouvrage sur les graphes (Konig)
●
1946 : Kuhn, Ford, Fulkerson, Roy, Berge, etc.
‣ Problèmes concrets : Science de
l'information, logistique, télécom, etc
Pourquoi un graphe ?
●
Un graphe modélise de nombreuses situations concrètes où
interviennent des objets en interaction :
‣
‣
‣
‣
●
Les interconnexions routières, ferroviaires ou aériennes
Les liens entre les composants d'un circuit électronique
Le plan d'une ville et de ses rues en sens unique
Autres situations improbables !
Les outils développés en théorie des graphes permettent de déduire
des propriétés et de proposer des méthodes de résolution (algos):
‣ Quel est le plus court chemin (en distance ou en temps) pour se rendre
d'une ville à une autre ?
‣ Comment minimiser la longueur totale des connexions d'un circuit
‣ Peut-on mettre une rue en sens unique sans rendre impossible la
circulation en ville ?
C'est quoi un graphe ? (1/2)
●
Un graphe permet de décrire un ensemble d'objets
(sommets/noeuds) et leurs interactions (arêtes)
●
Définition 1 :
‣ Un graphe est un couple G=(V,E) avec V un ensemble
de (n) sommets et E un ensemble de (m) arêtes
‣ Une arête e du graphe est une paire e=(x,y)
✓ x et y sont les extrémités de l'arête e
✓ x et y sont adjacents ou voisins
✓ N(x) : l'ensemble des voisins de x
‣ Un graphe est sans boucle : e≠(x,x)
‣ Deux arêtes e1=(x,y) et e2=(x,y) sont dites parallèles
‣ Un graphe sans boucles ni arêtes parallèles est dit simple
C'est quoi un graphe ? (2/2)
●
Définition 2 :
‣ Un graphe G=(V,E) est dit orienté lorsque
pour toute arête e on ordonne ses extrémités
‣ Une arête est alors appelée un arc
‣ Pour un arc (x,y), x est appelé sommet initial
(origine) et y sommet terminal (destination)
‣ On note souvent G=(V,A) un graphe orienté
et G=(V,E) un graphe non orienté
‣ Les notions d'incidences et d'adjacence
restent les mêmes
‣ On définit de façon naturelle les notions de
prédécesseurs V-(x) et de successeur V+(x)
dans le cas des graphes orientés
Notions d'adjacence
●
Définition 3 :
‣ Dans un graphe non orienté,
d(x) := |N(x)| d'un sommet x
désigne le nombre de voisins de x
✓ Le degré
✓ ∑x
d(x) = 2m
✓ Le nombre de sommets de degré impair est pair
–
Question : Est-il vrai que dans une classe 33 étudiants, au
moins un étudiant connaît un nombre pair d’autes
étudiants dès la rentée ?
‣ Dans un graphe orienté, on parle de degré entrant
d-(x) et degré sortant d+(x)
‣
δ(G)≤ 2m/n ; ∆(G)≥ 2m/n
Sous graphes
●
Pour caractériser une partie d'un
graphe de façon moins locale on parle
de sous-graphe et de graphe partiel
●
Définitions 4 :
‣ Un sous-graphe de G est un graphe H=(W,
E(W)) tel que W est un sous-ensemble de
V, et E(W) sont les arêtes induites par E sur
W, c'est à dire les arêtes de E dont les 2
extrémités sont des sommets de W
✓ Exemple : liaisons aériennes entre villes
‣ Un graphe partiel de G est un graphe I=(V,F)
tel que F ⊆ E.
✓ Exemple : liaisons d'au plus 3 heures
Cliques et stables
●
Pour un graphe, deux cas extrêmes
sont possibles pour les arêtes :
‣ Aucune arêtes n'est présente (tous les
sommets sont isolés)
‣ Toutes les arêtes possibles sont présentes
●
Définitions 5 :
‣ Un graphe complet est un graphe où
chaque sommet est relié à tous les autres
✓ Kn : graphe complet d'ordre n
✓ Chaque sommet est de degré n-1
‣ Une clique est un sous graphe complet
‣ Un stable est un sous-graphe sans arêtes
Représentation d'un graphe
●
Suivant l'application visée et les traitements à effectuer,
on peut adopter des représentations différentes pour un
graphe
‣ Représentation matricielle
✓ Simple mais gourmande en mémoire
‣ Représentation tabulaire
✓ Statique (allocation de mémoire couteuse en cas de
changement)
‣ Représentation par listes chaînées (par exemple
chainage successeurs/prédécesseurs)
Représentation matricielle
●
Graphe non orienté
‣ Matrice d'adjacence (n x n) :
A(G) = [aij] avec aij : le
nombre d'arêtes reliant le
sommet xi au sommet xj
✓ n2 cases mémoires
‣ Matrice d'incidence (n x m) :
B(G) = [bij] avec bij = le
nombre de fois où ej est
incidente à xi
✓ n x m cases mémoires
Représentation matricielle
●
Graphe orienté
‣ Matrice d'adjacence (n x n) A(G) = [aij] avec :
✓ aij = le nombre d'arc ayant xi comme extrémité initiale et
xj comme extrémité terminale
‣ Matrice d'incidence (n x m) B(G) = [bij] avec :
✓ bij = 1 si xi est origine de l'arc aj
✓ bij = -1 si xi est destination de l'arc aj
✓ bij = 0 sinon (pertinent seulement pour un graphe sans
boucle et sans arêtes multiples)
Représentation tabulaire
●
Tableaux des arcs (2m cases mémoires)
‣ Deux tableaux SI (sommet initial) et ST
(sommet terminale)
✓ SI[i] : sommet initial de l'arc i
✓ ST[i] : sommet terminale de l'arc i
●
Tableaux des successeurs (n+m cases
mémoires)
‣ Deux tableaux P et S
P:
a, ? b, ? c, ? d, ? e, ? f, ?
✓ S : concaténation des successeurs
des sommets xi
S:
✓ P[i] : l'indice du premier successeur
de xi dans S
g, ? h, ? i, ?
Se déplacer dans un graphe !
●
Comment découvrir les sommets/les arêtes/les chemins dans
un graphe ?
‣ Explorer un labyrinthe
‣ Découvrir les liaisons entre sommets
‣ Exemples : plusieurs !
●
Existe-t-il un chemin qui mène d'un sommet à un autre ?
●
Comment trouver le plus court chemin entre deux sommets ?
●
Quel est l'ensemble des sommets qu'on peut atteindre à
partir d'un sommet de départ ?
●
etc.
Chemins et Cycles
●
Définitions 6 :
‣ Un chemin (path) est une succession de
sommets p=(x1, x2, … , xk-1, xk) tel que il
existe dans le graphe une arête entre deux
sommets successifs
‣ La longueur du chemin = nombre d'arêtes
parcourues
‣ Un chemin est simple si chaque arête du
chemin est empruntée une seule fois
‣ Un chemin est élémentaire si chaque
sommet n'apparaît qu'une seule fois
✓ Question : Est-il vrai que si il existe un
chemin entre deux sommets alors il existe un
chemin élémentaire entre les deux
sommets ?
Chemins et Cycles
●
Définitions 7 :
‣ Un cycle est un chemin qui se termine à son point de départ
✓ Question : Est-il vrai que si tout sommet dans G est de degré
supérieur ou égal à 2, alors G possède au moins un cycle ?
‣ Graphe orienté : chemin/cycle Vs Graphe non orienté :
chaine/circuit
Notions de Connexité
●
Définition 8 :
‣ Un graphe est connexe ssi il existe un chemin entre chaque paire de ses
sommets
‣ Une composante connexe de G=(V,E) est un sous graphe G=(V',E')
connexe et maximal pour l'inclusion
‣ Un graphe ne possédant qu'une seule composante connexe est connexe !
‣ Question : Est-il vrai qu'un graphe connexe possède au moins n-1 arêtes ?
Parcours Eulériens
●
Définition 9 :
‣ Un chemin eulérien est un chemin empruntant
une et une seule fois chaque arête de G
‣ Un cycle eulérien est un chemin eulérien dont
les extrémités coïncident
‣ Un graphe eulérien est un graphe qui possède
un cycle eulérien
●
Théorème 1 :
‣ Un graphe non orienté connexe est eulérien si
et seulement si tous les sommets ont un degré
pair
‣ Un graphe non orienté connexe possède un
chemin eulérien si et seulement si le nombre
de sommets de degré impair est égal à 0 ou 2
Algorithme d'Euler
Input : G=(V,E) et un sommet x de V
Output : Φ Liste des sommets du cycle eulérien
Initialiser Φ := (x) ;
/* Base de la récursivité : x est isolé */
Si x est un sommet isolé Alors
Retourner
Sinon /* On construit un cycle contenant x */
Initialiser y := x
Tant Que y n'est pas un sommet isolé Faire
Choisir z l'un de ses voisins ;
Supprimer l'arête (y,z) de G ; y := z ;
Φ ← y ; /* on ajoute le sommet au cycle */
Fin Tant Que
/* Appel récursif sur chacun des k sommets
du cycle en concaténant les réponses */
Retourner Euler(G,Φ(1)) o … o Euler(G,Φ(k)) ;
Fin Si
Parcours Hamiltonien
●
Définitions 10 :
‣ Un chemin hamiltonien est un chemin
passant une seule fois par chaque sommet
du graphe
‣ Un cycle hamiltonien est un chemin
hamiltonien dont les extrémités coïncident
‣ Un graphe est hamiltonien s'il contient un
cycle hamiltonien
‣ Construire un chemin hamiltonien est
algorithmiquement difficile
●
Exemple :
‣ Voyageur de commerce
Parcours en Profondeur/Largeur
●
Visiter tous les sommets d'un graphe / explorer un graphe
●
L'exploration d'un graphe à partir d'un sommet de départ
permet de trouver la composante connexe du sommet
●
Dans un procédé d'exploration, il s'agit de fixer une
politique permettant à partir d'un sommet de choisir le
sommet suivant à visiter
‣ Exploration en Largeur
‣ Exploration en profondeur
‣ Algorithmes de recherche
Input : G=(V,E) et un sommet source s
Initialiser tous les sommets à non marqué ;
Marquer s ;
TantQue il existe un sommet non marqué
adjacent à un sommet marqué
Faire
Sélectionner un sommet y non marqué
adjacent à un sommet marqué ;
Marquer y ;
FinTantQue
BFS (plus court chemin) (1/5)
●
Comment trouver un plus court chemin ?
‣ Nous aimerions avoir une méthode systématique : un algo !
‣ Comment arrive-t-on à concevoir un tel algorithme ?
✓ On utilise les propriétés de l'objet plus court chemin !
●
Propriété 1 : un plus court chemin est élémentaire : énumération !
●
Propriété 2 : Sous-optimalité
‣ Si p=(s,...,t) est un plus court chemin entre s et t, alors pour tout
sommet x sur le chemin p, on a :
✓ Le sous-chemin de p jusqu'à x, (s,...,x), est un plus court
chemin de s à x
✓ Le sous-chemin de p depuis x, (x,...,t), est un plus court
chemin de x à t
BFS (plus court chemin) (2/5)
●
Le principe de sous-optimalité montre que trouver un
plus court chemin entre s et t conduit à trouver tous les
plus courts chemins entre s et les sommets x sur le
trajet
‣ Mais nous ne connaissons pas les sommets x sur le trajet !
‣ On va essayer de trouver tous les plus courts chemins vers les
autres sommets du graphe
‣ Pour cela, intéressons nous à la longueur de ces plus courts
chemins
✓ Pour tout sommet y sa distance D(y) de s
BFS (plus court chemin) (3/5)
●
Propriété :
‣ D(y) = 0 si y=s
‣ D(y) = 1 + min { D(x) | x voisin de y } sinon
●
On va alors visiter les sommets des plus proches vers les plus éloignés
jusqu'à tomber sur t
‣ Il faut choisir le bon ordre de visite/d'exploration
BFS (plus court chemin) (4/5)
●
Algorithme BFS et calcul de plus court chemin
Input : Graphe G=(V,E), Sommet s
F : FILE (liste FIFO)
Initialiser tous les sommets à non marqué ;
L(s) := 0; /* Marquer s */
F ← s ; /* enfiler s*/
Tant Que F n'est pas vide Faire
x← F;
/* Retirer le premier sommet de la file */
Pour chaque voisin y non marqué de x Faire
Marquer y ;
L(y) := L(x) + 1 ;
F← y
Fin Pour
Fin TantQue
/* Ajouter y à la fin de la file */
BFS (plus court chemin) (5/5)
●
Théorème :
‣ L'algorithme BFS calcule en temps O(|E|) la longueur des
plus courts chemins du sommet s à tous les autres sommets
du graphe
‣ Pour tout x, L(x)=D(x)
‣ L'algorithme BFS est optimal en temps : on doit considérer
au moins une fois chaque arête si l'on veut pas rater le plus
court chemin !
✓ Pensez y la prochaine fois que vous cherchez votre trajet dans le
métro !
Devinette !
●
Le jeu des trois seaux :
‣ On dispose de trois seaux A, B et C de respectivement 3, 5 et 8
litres. Initialement, le seau de 8 litres est complètement
rempli et les deux autres sont vides.
‣ En étant seulement autorisé à transvaser un seau dans l'autre, est-il
possible d'arriver à une configuration où le seau A est vide et les
seaux B et C contiennent exactement 4 litres chacun ?
‣ Comment peut-on faire pour généraliser se jeu à plus de 3 seaux ?

Documents pareils