Introduction aux graphes


Remarque : nous aurons besoin du package numpy de python.

1. Première manipulation de graphes

1.1 Matrice d'adjacence

Tous les graphes manipulés dans ce TP et les suivants seront, sauf mention du contraire, des 1-graphes.

La matrice d'adjacence M d'un graphe orienté G est définie par :

$M_{i,j}=1$ si il y a un arc allant du sommet i vers le sommet j
$M_{i,j}=0$ sinon


Pour un graphe non orienté, la définition est similaire (on remarque donc que la matricie d'adjacence d'un graphe non-orienté est symétrique).

Exemple :
Une matrice d'adjacence M sera un objet array du package numpy.

1.2 Affichage du diagramme d'un graphe

Nous avons écrit une fonction d'affichage d'un graphe à l'usage des étudiants. Cette fonction display() fait partie du fichier dirmaths.py, que vous pouvez charger directement à l'aide de la commande :

Exemple :
Voici le graphe G, graphe orienté dont la matrice d'adjacence est la matrice M précédente.

Par défaut, l'argument directed vaut True.


Plusieurs dispositions de sommets peuvent être utilisées, vous pouvez les trouver ici .

Par défaut, la disposition choisie est neato.

Exemple :

1.3 Création et modification d'un graphe

1.3.1 Construction d'un graphe

Le plus simple est de construire la matrice.
On pourra dans certains cas partir d'une matrice simple, comme np.zeros, np.eye ou encore np.ones, et rajouter/enlever des arcs.

Exemple :
Soit M2 la matrice du graphe G2 suivant :

Différentes méthodes peuvent être utilisées :

1.3.2 Exercices

Exemple :

Exemple :

2. Le graphe orienté

2.1 Matrice d'adjacence

Exemple :
Soit un graphe orienté G5, dont la liste des arcs est L = [(0,1),(0,2),(1,2),(1,3),(3,1),(3,2),(3,3)].

2.2 Prédecesseur, successeur

Exemple :
Reprenons le graphe G5, de matrice M5.

3. Le graphe non orienté

3.1 Matrice d'adjacence

Exemple :
Soit un graphe non orienté G6, dont la liste des arêtes est L = [(0,1),(0,2),(1,2),(1,3),(3,2),(3,3)].
Attention, l'arête (0,1) correspond aux deux arcs (0,1) et (1,0). La matrice obtenue doit donc être symétrique !

3.2 Voisin

Exemple :

4. Arbres enracinés

4.1 Exercice : racine d'un arbre enraciné

Exemple :

4.2 Exercice : parcours

definition de largeur(Arbre)

Visite = liste initialisée à vide
Racine = racine de l'arbre
File = liste des sommets à traiter, initialisée à Racine

tant que File non vide
  sortir le premier sommet s de File
  mettre s dans Visite
  mettre tous les successeurs de s à la fin de la File
fin tant que

retourner Visite

definition de profondeur(Arbre)

Visite = liste initialisée à vide
Racine = racine de l'arbre
Pile = liste des sommets à traiter, initialisée à Racine

tant que Pile non vide
  sortir le premier sommet s de Pile
  mettre s dans Visite
  mettre tous les successeurs de s au début de Pile
fin tant que

retourner Visite

Exemple :

4.3 Exercice : liste des prédécesseurs

Exemple :

5. Surf aléatoire

Soit un mini-site intranet S composé de 5 pages, liées entre elles de la façon suivante :

Supposons un surfeur aléatoire se trouvant au sommet 0, et se déplaçant un certain nombre de fois sur ce site de manière équiprobable. On cherche alors à déterminer les probabilités de se trouver sur chacune des pages.

Pour cela, notons $P_n$ la matrice ligne contenant les probabilités de se trouver à chaque sommet après n déplacements.
Par exemple, la matrice des probabilités initiales est donc $P_0$ = (1, 0, 0, 0,0). En effet, le surf aléatoire commence au sommet 0.
Après 1 déplacement aléatoire, la matrice des probabilités est $P_1$ = (0, 1/3, 0, 1/3, 1/3). En effet, il y a une chance sur 3 d'être en 1, en 3 ou en 4.

On définit de plus la matrice de transition $Mt$ par :$Mt_{i,j}$ = "probabilité de passer du sommet i au sommet j"

On pourrait alors montrer que les probabilités de se trouver aux différents sommets après $n$ déplacements sont données par la formule :
$P_n$ = $P_{0}\times(Mt)^n$

Exemple :

6. Bonus: parcours d'un graphe quelconque

Remarque : Afin d'éviter qu'un même sommet ne soit visité plusieurs fois, on instaurera un système de marquage : un sommet sera ajouté à la File que s'il n'est par encore marqué.

Exemple :

Exemple :