Graphes

Table of Contents

1. Introduction

Regarder le Cours d'ASD

2. Vocabulaire

  • Graphe : Un graphe non orienté est un couple \(G = (V, E)\) où \(V\) est un ensemble de sommets, et \(E \subset V \times V\) est un ensemble d'arêtes.
  • Ordre : L'ordre d'un graphe est \(G = (V, E)\) est \(|V|\) .
  • Adjacence : S'il existe une arête entre les sommets \(u\) et \(v\) de \(G\), alors ils sont adjacents. Deux sommets non adjacents sont indépendants.
  • Voisinage : Soit \(G = (V, E)\) le voisinage d'un sommet \(u\) de \(G\) est l'ensemble de ses voisins.
  • Graphe simple : \(G\) est un graphe simple si il ne contient ni boucles ni arêtes parallèles.
  • Graphe complet: Un graphe est complet si chaque sommet du graphe est relié directement à tous les autres sommets. On note \(K_n\) le graphe complet à \(n\) sommets. On a \(\operatorname{taille}(K_n) = \frac{n(n-1)}{2}\).
  • Chemin : Un chemin dans un graphe \(G = (V, E)\) est une séquence \(P = (u_0, u_1, \dots, u_{p-1})\) de sommets où \(\{u_i, u_{i+1}\} \in E\) pour \(0 \le i \le p-2\).
  • Chemin simple : Un chemin est simple si chaque arête apparaît au plus une fois.
  • Chemin élémentaire : Chaque sommet apparaît au plus une fois.
  • Longueur d'un chemin : Le nombre d'arêtes du chemin.
  • Cycle : un cycle dans un graphe \(G = (V, E)\) est une séquence \(C = (u_0, u_1, \dots, u_{p-1})\) de sommets où \(\{u_i, u_{p-1 \mod p}\} \in E\) pour \(0 \le i \le p-1\).
  • Cycle simple, cycle élémentaire…
  • La longueur du cycle est le nombre d'arêtes du cycle.
  • Connexité : Un graphe \(G = (V, E)\) est connexe si pour toute paire de sommets \(u, v \in V^2\), il existe un chemin dans \(G\) dont les extrémités sont \(u\) et \(v\).
  • Sous graphe : Un sous graphe d'un graphe \(G = (V, E)\) est un graphe \(H = (V', E')\) avec \(V' \subset V\) et \(E' \subset E\).
  • Sous graphe induit: On dit qu'un sous graphe est induit par un ensemble \(U \subset V\) de sommets si toutes les arêtes de \(E\) reliant deux sommets de \(U\) dans \(G\) sont présents dans \(H\). On peut aussi induire un sous graphe par les arêtes.
  • Composante connexe : Un composante connexe d'un graphe \(G = (V, E)\) est un sous-graphe connexe \(H = (V', E')\) de \(G\) qui est maximal, c'est-à-dire qu'il n'existe pas de sommet de \(G\) à la fois accessible à partir d'un élément de \(V'\) et hors de \(V'\)

Si jamais, revoir le cours d'IA

3. Parcours de graphe

Il n'y a pas de racine, donc il faut choisir un nœud de départ. Contrairement à un arbre, "descendre" ne signifie plus grand chose.

Un arbre de parcours est couvrant s'il contient tous les sommets.

4. Graphe pondéré

Un graphe pondéré est un graphe avec des poids "sur les arêtes". C'est \(G = (V, E, w)\), avec \(w : E \mapsto \mathbb{R}\) est une fonction de poids. Le poids d'un graphe est la somme les poids du graphe.

4.1. Arbre couvrant de poids minimum (ACPM)

On cherche un arbre couvrant dont la somme des poids des arêtes est minimum.

5. Construction d'un ACPM

ACPM-GENERIQUE

Tant que A ne forme pas un arbre couvrant faire
trouver une arête {u, v} qui est sûre pour A
ajouter {u, v} à A
retourner A

Soit A un ensemble d'arêtes qui est un sous-ensemble d'un arbre couvrant. Une arête \(/{u, v/}\) est sûre pour A si \(A \cup \{u, v\}\) est un sous ensemble d'un arbre couvrant

Autrement, une arête sûre est :

  • Valide au sens où elle ne crée pas de cycle
  • De poids minimale parmi les valides possibles

6. Algorithme de Prime

Voir algo

7. Recherche d'un chemin de poids le plus faible

graphe1.png

La distance la plus courte entre \(u\) et \(v\) sera le poids du plus court chemin entre u et v, noté \(\delta(u, v)\)

7.1. Algo de Dijkstra

Tableau des distances entre le sommet \(s\) et les autres sommets (estimés), en regardant successivement les voisins du sommet \(s\)

  0 1 2 3
s=0 0 \(+\inf\) \(+\inf\) \(+\inf\)
  0 1 3 \(+\inf\)
  0 1 3 6
  0 1 3 5
         

7.2. Pourquoi ça fonctionne ?

Bonne question

8. Graphe orienté

8.1. Vocabulaire

  • On ne parle plus d'arêtes mais d'arcs
  • On a un ensemble de successeurs et de prédécesseurs (au lieu de voisins)
  • On distigue les degrés des arcs entrants et sortants
  • Dans un chemin \((u_0, u_1, \dots, u_n)\), on peut dire que \(u_n\) est un descendant de \(u_0\)
  • On ne parle plus de composante connexe et de graphe connexe mais de composante fortement connexe et de graphe fortement connexe

Nous parlerons de poids négatifs

8.2. Bellman-Ford

Algo en \(n-1\) étapes, avec \(n\) l'ordre du graphe, car, s'il n'y a pas de cycle négatif, alors on augmentera forcément le poids du chemin. On envisage tous les arcs, pas tous les sommets comme Djikstra.

La complexité de cet algo est \(O(|V||E|)\)

8.3. Floyd-Warshall

Au départ, on a une estimation de tous les chemins de longueur 1. Ensuite, on regarde ce qu'il se passe en rajoutant un sommet

Complexité de \(O(|V|^3)\), mais calcule toutes les distances entre chaque paire de sommet

8.4. Fermeture transitive

La fermeture transitive d'un graphe \(G=(V,E)\) est le graphe \(G*(V, A*)\) où, si un chemin entre deux sommets existe, on rajoute un arc qui les relie. L'algorithme de Floyd-Warshall nous permet de calculer cette fameuse fermeture transitve (poids != inf => il existe un arc).

9. Les flots

  • capacité : \(c(u, v)\)
  • flot: \(f(u, v)\)
  • Contrainte de capacité : \(c(u, v) \le f(u, v)\)
  • Contraite de conservation : tout ce qui rentre dans un sommet doit sortir

9.1. Comment calculer flot max

Un chemin augmentant est un chemin reliant la source \(s\) au puits \(t\) le long duquel on peut augmenter la quantité de flot.

On utilise le graphe des résiduels.

10. Coloration de graphe

  • Une k-coloration d'un graphe est une application \(c : V \to S\) où \(S\) est un ensemble de \(k\) couleurs.
  • Une coloration \(c\) est propre si toute arête a ses extrémités de couleurs différentes.
  • Un graphe est $k$-colorable s'il admet une $k$-coloration propre.
  • Ln plus petit \(k\) pour lequel un grahe \(G\) est $k$-colorable est son nombre chromatique, noté \(\xi (G)\). Si \(\xi(G) = k\), le graphe \(G\) est dit $k$-chromatique.

Author: romann

Created: 2026-10-05 lun. 10:26

Validate