Aller au contenu

Synthèse

LINMA1691Synthèse

Cette synthèse suit les grands chapitres des notes du professeur, mais ne développe que la matière effectivement vue au cours ou nécessaire pour les TP déjà actifs. L’objectif est d’avoir une structure stable pendant tout le quadrimestre, sans ajouter des blocs isolés séance après séance.

ChapitreThèmeÉtat
1Graphes connexes, eulériens et bipartisActif
2Plus courts cheminsActif
3Arbres et connectivitéActif — CM3
4Graphes hamiltoniensÀ venir
5Couplages et couverturesÀ venir
6Colorations, indépendants, cliques et RamseyÀ venir
7Graphes planairesÀ venir
8Flots et coupesÀ venir
9Algèbre linéaire en théorie des graphesÀ venir
10Complexité algorithmique : P, NP et NP-complétudeÀ venir

Les chapitres 4 à 10 seront remplis lorsque la matière correspondante aura réellement été vue.


Un graphe est un triplet

G=(V,E,φ),G=(V,E,\varphi),

où :

  • VV est l’ensemble fini des sommets ;
  • EE est l’ensemble fini des arêtes ;
  • φ\varphi est la fonction d’incidence qui associe à chaque arête son ou ses sommets incidents.

Deux sommets incidents à une même arête sont adjacents.

Une boucle est une arête incidente deux fois au même sommet. Deux arêtes sont multiples si elles relient les mêmes sommets.

Le degré d’un sommet vv, noté deg⁡(v)\deg(v), est le nombre d’incidences d’arêtes en vv. Une boucle compte donc pour deux.

Un graphe est simple s’il ne possède ni boucle ni arêtes multiples. Dans un graphe simple à nn sommets,

0≤deg⁡(v)≤n−1.0\le \deg(v)\le n-1.

Un sous-graphe de GG est obtenu en ne gardant qu’une partie des sommets et/ou des arêtes. Le sous-graphe induit par V′⊆VV'\subseteq V conserve les sommets de V′V' et toutes les arêtes de GG dont les deux extrémités sont dans V′V'.

Deux graphes sont isomorphes s’ils ne diffèrent que par le nom donné aux sommets et aux arêtes : il existe des bijections qui préservent l’incidence, donc l’adjacence.

Conséquence pratique : toute propriété intrinsèque du graphe est conservée par isomorphisme. Par exemple, deux graphes ayant un nombre différent de triangles ne peuvent pas être isomorphes.

La réciproque est fausse pour beaucoup d’invariants : avoir la même liste de degrés ne suffit pas à garantir l’isomorphisme.

Théorème des poignées de main

Pour tout graphe non orienté fini,

∑v∈Vdeg⁡(v)=2∣E∣.\sum_{v\in V}\deg(v)=2|E|.

Chaque arête contribue exactement deux incidences à la somme des degrés.

Deux conséquences immédiates :

dˉ=1∣V∣∑v∈Vdeg⁡(v)=2∣E∣∣V∣\bar d = \frac{1}{|V|}\sum_{v\in V}\deg(v) = \frac{2|E|}{|V|}

pour le degré moyen, et le nombre de sommets de degré impair est toujours pair.

Dans un graphe simple à nn sommets,

∣E∣≤(n2)=n(n−1)2.|E|\le \binom n2=\frac{n(n-1)}2.

Pour une liste d1,…,dnd_1,\ldots,d_n, commencer par vérifier

0≤di≤n−1et∑idi est pair.0\le d_i\le n-1 \qquad\text{et}\qquad \sum_i d_i \text{ est pair}.

Ce sont des conditions nécessaires, pas suffisantes.

Autre raisonnement utile : si un sommet est de degré n−1n-1, il est relié à tous les autres. On peut alors le retirer et diminuer de 11 les degrés restants.

Enfin, dans un graphe simple à n≥2n\ge2 sommets, les degrés 00 et n−1n-1 ne peuvent pas apparaître simultanément. Il n’y a donc qu’au plus n−1n-1 valeurs de degré possibles pour nn sommets : deux sommets ont nécessairement le même degré.

Un parcours est une suite alternée

v0,e0,v1,e1,…,ek−1,vkv_0,e_0,v_1,e_1,\ldots,e_{k-1},v_k

telle que chaque arête eie_i relie viv_i à vi+1v_{i+1}.

Sa longueur est son nombre d’arêtes, ici kk.

Un parcours est fermé si

v0=vk.v_0=v_k.

Un chemin est un parcours dont les sommets sont distincts, sauf éventuellement les deux extrémités dans le cas fermé. Un cycle est un chemin fermé.

Le support actuel emploie surtout les termes parcours fermé et cycle. Le terme circuit n’est pas défini séparément dans les slides vues : s’il apparaît dans un énoncé, il faut vérifier la convention utilisée.

La distance entre deux sommets dans un graphe non pondéré est

d(u,v)=min⁡{nombre d’areˆtes d’un parcours de u aˋ v}.d(u,v) = \min\{\text{nombre d'arêtes d'un parcours de }u\text{ à }v\}.

Un parcours de longueur minimale est toujours un chemin : si un sommet était répété, on pourrait supprimer le détour entre deux occurrences.

Un graphe non orienté est connexe si toute paire de sommets peut être reliée par un parcours.

Une composante connexe est un sous-graphe connexe maximal.

Pour un graphe simple connexe à nn sommets,

n−1≤∣E∣≤(n2).n-1\le |E|\le \binom n2.

La borne inférieure exprime qu’il faut au moins n−1n-1 arêtes pour relier nn sommets. La borne supérieure correspond au graphe complet.

Plus généralement, si un graphe possède nn sommets, mm arêtes et cc composantes connexes,

m≥n−c⟺c≥n−m.m\ge n-c \qquad\Longleftrightarrow\qquad c\ge n-m.

Pour maximiser le nombre d’arêtes tout en gardant un graphe simple non connexe, on prend un graphe complet sur n−1n-1 sommets et un sommet isolé. Ainsi,

∣E∣≤(n−12)=(n−1)(n−2)2.|E| \le \binom{n-1}{2} = \frac{(n-1)(n-2)}2.

Donc un graphe simple possédant strictement plus de

(n−1)(n−2)2\frac{(n-1)(n-2)}2

arêtes est nécessairement connexe.

Un parcours eulérien utilise chaque arête du graphe exactement une fois.

Un graphe est eulérien s’il possède un parcours eulérien fermé.

Théorème d'Euler

Un graphe connexe est eulérien si et seulement si tous ses sommets sont de degré pair :

G connexe et euleˊrien⟺deg⁡(v) pair pour tout v∈V.G\text{ connexe et eulérien} \quad\Longleftrightarrow\quad \deg(v)\text{ pair pour tout }v\in V.

Dans un parcours eulérien fermé, chaque fois que l’on arrive en un sommet par une arête, on doit en repartir par une autre. Les arêtes incidentes au sommet se mettent donc par paires : son degré est pair.

Preuve constructive vue au tableau

Supposons le graphe connexe et tous ses degrés pairs.

  1. Partir d’un sommet arbitraire u0u_0.
  2. Avancer en utilisant uniquement des arêtes encore non visitées.
  3. On ne peut pas rester bloqué dans un sommet différent de u0u_0 : si l’on vient d’y entrer, un nombre impair d’arêtes incidentes a été utilisé ; le degré total étant pair, il reste au moins une arête pour en ressortir.
  4. Le parcours finit donc par revenir en u0u_0. On obtient un parcours fermé PP.
  5. Si toutes les arêtes ont été utilisées, PP est eulérien.
  6. Sinon, la connexité garantit qu’il existe un sommet u1u_1 de PP incident à une arête non encore utilisée.
  7. Depuis u1u_1, construire de la même manière un nouveau parcours fermé P′P' avec les arêtes restantes.
  8. Insérer P′P' dans PP au sommet u1u_1 et recommencer.

La parité garantit que chaque parcours partiel se referme. La connexité garantit qu’on peut continuer tant qu’il reste des arêtes.

Cette preuve donne directement l’algorithme de Hierholzer. Sa complexité annoncée au cours est

O(∣E∣).O(|E|).

Existence d'un parcours eulérien

Un graphe connexe possède un parcours eulérien si et seulement si le nombre de sommets de degré impair vaut 0 ou 2.

  • 00 sommet impair : le parcours peut être fermé ;
  • 22 sommets impairs : ils sont les deux extrémités du parcours ouvert.

Dans le cas de deux sommets impairs uu et vv, on peut ajouter artificiellement l’arête uvuv, appliquer Euler au graphe obtenu puis supprimer cette arête du parcours fermé.

Fleury construit directement un parcours eulérien. À chaque étape, il choisit une arête non encore visitée qui n’est pas un pont du graphe restant, sauf si aucun autre choix n’est possible.

Un pont est une arête dont la suppression augmente le nombre de composantes connexes.

L’intuition est simple : ne pas couper trop tôt l’accès à une partie du graphe contenant encore des arêtes à visiter.

Dans la version présentée au cours,

Hierholzer : O(∣E∣)etFleury : O(∣E∣2).\text{Hierholzer : }O(|E|) \qquad\text{et}\qquad \text{Fleury : }O(|E|^2).

Penser immédiatement à Euler lorsque l’énoncé demande de :

  • parcourir chaque arête exactement une fois ;
  • tracer une figure sans lever le crayon et sans repasser sur un segment ;
  • construire un parcours couvrant toutes les arêtes.

Le premier contrôle est alors : connexité + nombre de sommets de degré impair.

Pour des sommets v1,…,vnv_1,\ldots,v_n, la matrice d’adjacence AA est la matrice carrée dont l’entrée AijA_{ij} est le nombre d’arêtes entre viv_i et vjv_j.

Pour des arêtes e1,…,eme_1,\ldots,e_m, la matrice d’incidence MM est la matrice n×mn\times m dont l’entrée MijM_{ij} vaut le nombre de fois que viv_i est incident à eje_j.

Dans la matrice d’incidence :

  • la somme d’une ligne donne le degré du sommet correspondant ;
  • la somme d’une colonne vaut 22.

C’est une manière matricielle de retrouver le théorème des poignées de main.

Matrice d'adjacence et nombre de parcours

Pour tout entier k≥0k\ge0,

(Ak)ij=nombre de parcours de longueur k de vi vers vj.(A^k)_{ij} = \text{nombre de parcours de longueur }k \text{ de }v_i\text{ vers }v_j.

Ce résultat servira de modèle au chapitre 2 pour calculer les plus courts chemins avec le semi-anneau (min⁡,+)(\min,+).

Dans un graphe orienté, une arête est un couple ordonné (u,v)(u,v) : son sens compte.

On distingue :

  • d+(v)d^+(v) : degré sortant ;
  • d−(v)d^-(v) : degré entrant.

Pour tout graphe orienté fini,

∑v∈Vd+(v)=∑v∈Vd−(v)=∣E∣.\sum_{v\in V} d^+(v) = \sum_{v\in V} d^-(v) = |E|.

Un graphe orienté est fortement connexe lorsqu’il existe un parcours dirigé de tout sommet vers tout autre.

Deux sommets sont dans la même composante fortement connexe s’ils sont mutuellement atteignables.

Pour tester la forte connexité à partir d’un sommet ss, il suffit de vérifier :

  1. que tous les sommets sont atteignables depuis ss ;
  2. que ss est atteignable depuis tous les sommets.

La deuxième condition peut se tester en inversant toutes les arêtes puis en explorant à nouveau depuis ss.

Dans un graphe orienté fortement connexe, la version dirigée du critère d’Euler est

d+(v)=d−(v)pour tout v.d^+(v)=d^-(v) \qquad \text{pour tout }v.

Un graphe est biparti s’il existe une partition

V=V0∪V1,V0∩V1=∅,V=V_0\cup V_1, \qquad V_0\cap V_1=\varnothing,

telle que toute arête relie un sommet de V0V_0 à un sommet de V1V_1.

Caractérisation des graphes bipartis

Un graphe est biparti si et seulement si tous ses cycles sont de longueur paire.

Équivalemment :

G biparti⟺G ne contient aucun cycle impair.G\text{ biparti} \quad\Longleftrightarrow\quad G\text{ ne contient aucun cycle impair}.

L’idée constructive de la réciproque est de choisir un sommet v0v_0 et de séparer les sommets selon la parité de leur distance à v0v_0 :

V0={v:d(v,v0) pair},V1={v:d(v,v0) impair}.V_0=\{v:d(v,v_0)\text{ pair}\}, \qquad V_1=\{v:d(v,v_0)\text{ impair}\}.

Les sommets de QkQ_k sont les kk-uplets de 00 et de 11. Deux sommets sont adjacents s’ils diffèrent en exactement une coordonnée.

Chaque sommet possède exactement kk voisins :

deg⁡(v)=k.\deg(v)=k.

Il y a 2k2^k sommets, donc

∣E(Qk)∣=k2k2=k2k−1.|E(Q_k)| = \frac{k2^k}{2} = k2^{k-1}.

Une bipartition naturelle sépare les sommets ayant un nombre pair de 11 de ceux ayant un nombre impair de 11.

Un tournoi est une orientation du graphe complet KnK_n : pour toute paire de sommets distincts u,vu,v, exactement une des deux arêtes u→vu\to v ou v→uv\to u existe.

Un sommet uu est un roi si tout autre sommet est atteignable depuis uu en au plus deux arêtes dirigées.

Le résultat utilisé au TP est : un sommet de degré sortant maximum est un roi. La preuve se fait par contradiction : si un sommet vv n’était pas atteignable en au plus deux étapes depuis uu, alors vv battrait uu et tous les voisins sortants de uu, ce qui donnerait d+(v)>d+(u)d^+(v)>d^+(u).

Pour éviter une confusion fréquente :

NotionObjet visité exactement une fois
Eulérienles arêtes
Hamiltonienles sommets

Un chemin hamiltonien passe par chaque sommet exactement une fois. Un cycle hamiltonien fait de même en revenant à son sommet de départ. Les théorèmes hamiltoniens appartiennent au chapitre 4 et ne sont pas encore matière active.


Une fonction de poids

w:E→Rw:E\to\mathbb R

associe un poids à chaque arête. Un graphe muni d’une telle fonction est un graphe pondéré.

Le poids d’un parcours est la somme des poids de ses arêtes.

La distance pondérée entre uu et vv est

d(u,v)=min⁡{poids d’un chemin de u aˋ v}.d(u,v) = \min\{\text{poids d'un chemin de }u\text{ à }v\}.

Dans un graphe dirigé, il faut garder en tête que

d(u,v)≠d(v,u)d(u,v) \neq d(v,u)

en général.

Plus court parcours et plus court chemin

Si tous les poids sont non négatifs, le plus court parcours et le plus court chemin entre deux sommets ont la même longueur.

Idée de preuve. Si un parcours minimal répète un sommet, il contient un cycle. Ce cycle a un poids ≥0\ge0, donc le supprimer ne peut pas augmenter le poids. En répétant l’opération, on obtient un chemin de même longueur minimale.

L’hypothèse

w(e)≥0w(e)\ge0

est donc centrale.

À partir d’une source u0u_0, calculer les distances minimales vers les autres sommets d’un graphe pondéré dont les poids sont non négatifs.

Dijkstra détermine progressivement les distances exactes. Il maintient un ensemble SS des sommets dont la distance est déjà définitivement connue et un label ℓ(v)\ell(v) pour les autres.

S={u0},ℓ(u0)=0,ℓ(v)=+∞ pour v≠u0.S=\{u_0\}, \qquad \ell(u_0)=0, \qquad \ell(v)=+\infty \text{ pour }v\ne u_0.

Quand u′u' vient d’être ajouté à SS, pour chaque v∉Sv\notin S :

ℓ(v)←min⁡(ℓ(v),ℓ(u′)+w(u′v)).\ell(v) \leftarrow \min\bigl( \ell(v), \ell(u')+w(u'v) \bigr).

Ensuite, choisir hors de SS un sommet vmin⁡v_{\min} de label minimal et l’ajouter à SS.

Invariant de Dijkstra

Après chaque mise à jour :

  • pour v∈Sv\in S,
ℓ(v)=d(u0,v),\ell(v)=d(u_0,v),

et un plus court chemin vers vv reste dans SS ;

  • pour v∉Sv\notin S, ℓ(v)\ell(v) est la longueur du plus court chemin connu dont tous les sommets internes sont déjà dans SS, donc
ℓ(v)≥d(u0,v).\ell(v)\ge d(u_0,v).

Cet invariant est le cœur de la preuve de correction : lorsqu’on choisit le sommet de label minimal hors de SS, les poids non négatifs empêchent un détour futur par des sommets encore hors de SS d’améliorer sa distance.

Dijkstra fonctionne pour :

  • un graphe dirigé ou non ;
  • des poids
w(e)≥0.w(e)\ge0.

Il fournit les distances depuis une source. En mémorisant un prédécesseur lors des relaxations, on peut aussi reconstruire les chemins.

Si seule une cible tt nous intéresse, on peut arrêter lorsque tt entre dans SS.

Si toutes les arêtes ont le même poids strictement positif, Dijkstra se réduit essentiellement à une recherche en largeur (BFS).

Les slides présentent un temps de l’ordre de

∣E∣,|E|,

ce qui est de l’ordre de

∣V∣2|V|^2

pour un graphe dense.

Dijkstra ne dépend pas de la symétrie des arêtes. Il s’applique donc également aux graphes dirigés, à condition de respecter le sens des arêtes et de conserver l’hypothèse de poids non négatifs.

C’est le cadre naturel pour modéliser, par exemple, des routes à sens unique.

On note dk(u,v)d_k(u,v) la longueur du plus court parcours de exactement kk arêtes de uu vers vv.

On obtient la récurrence

dk+1(u,v)=min⁡x(dk(u,x)+w(x,v)).d_{k+1}(u,v) = \min_x \bigl( d_k(u,x)+w(x,v) \bigr).

À comparer avec le comptage des parcours :

ak+1(u,v)=∑xak(u,x)a(x,v).a_{k+1}(u,v) = \sum_x a_k(u,x)a(x,v).

La structure est la même, mais les deux opérations changent :

∑⟶min⁡,×⟶+.\sum \longrightarrow \min, \qquad \times \longrightarrow +.

Sur

R+∪{+∞},\mathbb R_+\cup\{+\infty\},

on définit

a⊕b=min⁡(a,b),a⊗b=a+b.a\oplus b=\min(a,b), \qquad a\otimes b=a+b.

Les éléments neutres sont :

+∞pour ⊕,+\infty \quad\text{pour }\oplus,

et

0pour ⊗.0 \quad\text{pour }\otimes.

Le produit matriciel associé devient

(A⊗B)ij=min⁡k(Aik+Bkj).(A\otimes B)_{ij} = \min_k (A_{ik}+B_{kj}).

La matrice identité pour ce produit contient 00 sur la diagonale et +∞+\infty ailleurs.

2.6 Puissances (min⁡,+)(\min,+) et distances

Section intitulée « 2.6 Puissances (min⁡,+)(\min,+)(min,+) et distances »

Soit AA la matrice d’adjacence pondérée, avec

Aij=+∞A_{ij}=+\infty

s’il n’existe pas d’arête de ii vers jj.

Alors

A⊗kA^{\otimes k}

contient les longueurs des plus courts parcours de exactement kk arêtes.

En introduisant l’identité II,

Dk=(I⊕A)⊗kD_k=(I\oplus A)^{\otimes k}

contient les plus courts parcours de au plus kk arêtes.

Pour un graphe à nn sommets, les slides donnent

Dn=(I⊕A)⊗nD_n=(I\oplus A)^{\otimes n}

comme matrice des plus courts chemins.

Par mises au carré successives, la complexité indiquée au cours est

O(n3log⁡2n).O(n^3\log_2 n).

Le point conceptuel à retenir est l’analogie :

la multiplication matricielle classique compte les parcours ; la multiplication matricielle dans le semi-anneau (min⁡,+)(\min,+) minimise leur poids.


Ce chapitre reprend les notions travaillées au CM3 : explorer un réseau, conserver la connexité avec le moins d’arêtes possible, optimiser le coût d’un arbre couvrant, puis mesurer sa résistance aux défaillances. Les derniers résultats (Menger et Harary) complètent la partie « connectivité » du support thématique.

Problème. Depuis un sommet de départ ss, découvrir les sommets accessibles et les arêtes permettant de les atteindre. Dans un graphe non connexe, un seul lancement n’explore que la composante de ss.

On marque les sommets au moment de leur découverte pour éviter de les visiter plusieurs fois. Le choix de la structure de données détermine l’ordre d’exploration :

ExplorationStructureRèglePropriété utile
BFS (largeur)File FIFOPremier entré, premier sortiDécouvre les sommets par distance croissante en nombre d’arêtes
DFS (profondeur)Pile LIFO ou récursionDernier entré, premier sortiExplore une branche aussi loin que possible, puis revient en arrière

BFS donne les plus courts chemins d’un graphe non pondéré (ou dont les arêtes ont toutes un poids identique strictement positif). DFS ne garantit pas cela.

Invariant commun. Chaque sommet marqué est atteignable depuis ss ; un sommet n’est marqué qu’une fois. Tant qu’il reste un sommet accessible non marqué, une arête relie une partie déjà découverte à une partie non découverte et l’exploration peut progresser. À la fin, tous les sommets atteignables depuis ss ont été marqués.

Avec des listes d’adjacence, chaque sommet et chaque arête sont traités un nombre constant de fois :

O(∣V∣+∣E∣)\boxed{O(|V|+|E|)}

Pour calculer toutes les composantes connexes, on relance BFS ou DFS depuis un sommet non marqué jusqu’à ce que tous les sommets soient marqués.

Une exploration dirigée respecte le sens des arcs. Un graphe orienté est fortement connexe si, pour toute paire ordonnée de sommets (u,v)(u,v), il existe un chemin dirigé de uu vers vv.

Pour tester la forte connexité, choisir ss, puis :

  1. Explorer depuis ss dans GG : tous les sommets doivent être atteignables depuis ss.
  2. Inverser tous les arcs pour obtenir le graphe transposé GTG^\mathsf T et explorer depuis ss : tous les sommets doivent pouvoir atteindre ss dans GG.

Si les deux tests réussissent, pour tous u,vu,v, on peut suivre u→s→vu\to s\to v. Coût total : O(∣V∣+∣E∣)O(|V|+|E|).

Attention. Être fortement connexe ne veut pas dire que deux sommets sont reliés par une seule arête, ni même par deux. Il suffit qu’un chemin dirigé existe dans chaque sens.

Un arbre est un graphe non orienté connexe et sans cycle. Une forêt est un graphe sans cycle ; chacune de ses composantes est un arbre.

Intuition : un arbre relie tout le monde sans redondance. Une arête supprimée coupe la connexion ; une arête supplémentaire entre deux sommets non adjacents crée un cycle.

Caractérisations équivalentes des arbres

Pour un graphe non orienté GG à nn sommets et mm arêtes, les conditions suivantes sont équivalentes :

  1. GG est connexe et sans cycle ;
  2. GG est sans cycle et m=n−1m=n-1 ;
  3. GG est connexe et m=n−1m=n-1 ;
  4. GG est connexe et supprimer n’importe quelle arête le déconnecte ;
  5. GG est sans cycle et ajouter n’importe quelle nouvelle arête entre sommets distincts non adjacents crée exactement un cycle ;
  6. Il existe un unique chemin simple entre chaque paire de sommets distincts.

Réflexe en exercice. Le seul comptage m=n−1m=n-1 ne suffit pas : vérifier en plus la connexité ou l’absence de cycle. Un arbre peut avoir un sommet de degré supérieur à 22 (par exemple une étoile).

Idée de preuve à reconstruire. Dans un arbre, supprimer une arête sépare ses extrémités, sinon il existerait un autre chemin et donc un cycle. Ajouter une arête uvuv referme l’unique chemin préexistant entre uu et vv. Le nombre d’arêtes n−1n-1 peut se démontrer par suppression successive des feuilles (ou induction).

Arbre sous-tendant (ou couvrant) : arbre qui conserve tous les sommets de GG, mais seulement certaines arêtes.

Existence

Tout graphe non orienté connexe possède un arbre sous-tendant.

Construction. Tant qu’il reste un cycle, enlever une de ses arêtes : le graphe reste connexe. Sans cycle, il devient un arbre couvrant.

Si chaque arête a un coût w(e)w(e), le poids d’un arbre est :

w(T)=∑e∈E(T)w(e).w(T)=\sum_{e\in E(T)}w(e).

On cherche l’arbre sous-tendant TT pour lequel w(T)w(T) est minimal.

MST ≠ plus court chemin :

  • MST : minimiser la somme des coûts de toutes les arêtes retenues pour relier tous les sommets.
  • Plus court chemin : minimiser le coût du trajet entre deux sommets.

Même objectif : construire un arbre sous-tendant de poids minimum d’un graphe connexe pondéré. Deux façons de grandir :

Idée : considérer les arêtes de la moins chère à la plus chère, sans jamais former de cycle.

  1. Trier toutes les arêtes par poids croissant.
  2. Ajouter l’arête suivante si elle ne crée pas de cycle ; sinon l’ignorer.
  3. Arrêter lorsqu’on a n−1n-1 arêtes.

Image mentale : plusieurs petits arbres se rejoignent en une seule structure.

  • Choix : poids minimal parmi les arêtes encore examinables, à l’échelle du graphe.
  • Contrôle : éviter les cycles, avec union-find (composantes disjointes).
  • Complexité : O(mlog⁡m)O(m\log m) avec m=∣E∣m=|E| (tri dominant).

Idée : partir d’un sommet et toujours relier un nouveau sommet au réseau déjà construit.

  1. Choisir un sommet ss et poser S={s}S=\{s\}.
  2. Choisir l’arête la moins chère entre SS et V∖SV\setminus S.
  3. Ajouter cette arête et le sommet atteint ; répéter jusqu’à S=VS=V.

Image mentale : un seul arbre s’étend étape par étape.

  • Choix : poids minimal parmi les arêtes sortant de l’arbre courant, pas parmi toutes les arêtes du graphe.
  • Contrôle : une extrémité dans SS, l’autre en dehors.
  • Structure : file de priorité.
  • Complexité : O(m+nlog⁡n)O(m+n\log n) avec une implémentation adaptée (par exemple un tas de Fibonacci), n=∣V∣n=|V|.
  • Kruskal : plusieurs composantes qui fusionnent ; aucun cycle.
  • Prim : un arbre unique qui grandit ; toujours vers un nouveau sommet.

Point commun : si GG est connexe, les deux algorithmes produisent un MST. En cas de poids égaux, plusieurs MST distincts peuvent exister.

Une coupe sépare les sommets en deux ensembles non vides, SS et V∖SV\setminus S. Ses arêtes traversent cette séparation :

δ(S)={uv∈E:u∈S, v∉S}.\delta(S)=\{uv\in E:u\in S,\ v\notin S\}.

Observation : tout arbre sous-tendant doit contenir au moins une arête de chaque coupe, sinon les deux côtés ne seraient pas reliés.

Arête légère d'une coupe

Si une coupe ne traverse aucune arête déjà choisie, sélectionner une arête de poids minimum de cette coupe est un choix sûr : il existe un MST compatible avec ce choix et tous les précédents.

Preuve en quatre étapes — argument d’échange

Section intitulée « Preuve en quatre étapes — argument d’échange »

Soit T∗T^* un MST contenant les arêtes déjà retenues, mais pas la nouvelle arête ee.

  1. Ajouter ee à T∗T^* crée exactement un cycle.
  2. Le cycle franchit la coupe au moins deux fois ; il possède donc une autre arête ff qui la traverse. ff n’appartient pas aux arêtes déjà retenues.
  3. Comparer les coûts : comme ee est de poids minimum sur la coupe, w(e)≤w(f)w(e)\le w(f).
  4. Échanger : supprimer ff et garder ee. On obtient encore un arbre sous-tendant et
w(T∗−f+e)≤w(T∗).w(T^*-f+e)\le w(T^*).

Le nouvel arbre est donc lui aussi optimal, et il contient ee.

Piège : les arêtes d’un cycle n’ont pas forcément le même poids. L’inégalité provient de la coupe, pas du cycle.

Application : Prim utilise la coupe entre l’arbre courant et les autres sommets ; Kruskal utilise une coupe séparant une composante de sa forêt des autres.

T(G)T(G) désigne le nombre d’arbres sous-tendants du graphe GG.

Théorème de Cayley

Pour le graphe complet KnK_n à sommets étiquetés :

T(Kn)=nn−2.T(K_n)=n^{n-2}.

Exemple : T(K4)=42=16T(K_4)=4^2=16. Ne pas confondre arbres étiquetés et formes d’arbres à isomorphisme près.

Compter par deux cas

Pour une arête ee qui n’est pas une boucle :

T(G)=T(G−e)+T(G/e).T(G)=T(G-e)+T(G/e).

Pourquoi additionner ? Chaque arbre sous-tendant :

  • exclut ee : on le compte dans G−eG-e (suppression) ;
  • contient ee : on le compte dans G/eG/e (contraction, fusion des extrémités).

Conserver les arêtes parallèles éventuelles après contraction : ce sont des choix distincts.

Cas de base : arbre → T(G)=1T(G)=1 ; graphe non connexe → T(G)=0T(G)=0 ; cycle CnC_n → T(Cn)=nT(C_n)=n.

3.7 Connectivité : combien de pannes un réseau supporte-t-il ?

Section intitulée « 3.7 Connectivité : combien de pannes un réseau supporte-t-il ? »

Un arbre est économique mais fragile : une seule arête supprimée suffit à le déconnecter.

Deux mesures différentes :

  • κ(G)\kappa(G), connectivité : taille minimale d’une coupe de sommets qui déconnecte GG (convention : κ(Kn)=n−1\kappa(K_n)=n-1).
  • λ(G)\lambda(G), arête-connectivité : taille minimale d’une coupe d’arêtes qui déconnecte GG.

Interprétation immédiate :

  • kk-connexe → reste connexe après suppression arbitraire de k−1k-1 sommets au plus.
  • kk-arête-connexe → reste connexe après suppression arbitraire de k−1k-1 arêtes au plus.

Lien entre les connectivités

En notant δ(G)\delta(G) le degré minimum :

κ(G)≤λ(G)≤δ(G).\kappa(G)\le\lambda(G)\le\delta(G).

Pourquoi λ(G)≤δ(G)\lambda(G)\le\delta(G) ? Supprimer toutes les arêtes d’un sommet de degré minimum l’isole.

Piège d’examen : résister à la suppression de deux arêtes exige une 3-arête-connexité, et non une 2-arête-connexité.

Intuition : si plusieurs chemins indépendants relient deux sommets, une seule panne ne suffit pas à tous les détruire.

Théorème de Menger — sommets

Pour un graphe non orienté d’au moins k+1k+1 sommets : GG est kk-connexe si et seulement si toute paire de sommets distincts possède au moins kk chemins intérieurement disjoints.

« Intérieurement disjoints » : les chemins peuvent partager leurs deux extrémités, pas leurs sommets intermédiaires.

Cas k=2k=2 (Whitney) : deux sommets distincts d’un graphe 2-connexe appartiennent à un même cycle.

Version arêtes : GG est kk-arête-connexe si et seulement si toute paire de sommets distincts est reliée par au moins kk chemins sans arête commune. Ils peuvent partager des sommets intérieurs.

Réflexe : quand l’énoncé exige plusieurs itinéraires indépendants, déterminer si l’indépendance concerne les sommets ou les arêtes.

3.9 Harary : robustesse avec un minimum d’arêtes

Section intitulée « 3.9 Harary : robustesse avec un minimum d’arêtes »

Problème : construire un graphe kk-connexe à nn sommets avec le moins d’arêtes possible.

Comme chaque sommet doit avoir un degré au moins kk, les poignées de main donnent :

2∣E∣=∑v∈Vdeg⁡(v)≥kn.2|E|=\sum_{v\in V}\deg(v)\ge kn.

D’où la borne :

∣E∣≥⌈kn2⌉.|E|\ge\left\lceil\frac{kn}{2}\right\rceil.

Graphes de Harary Hk,nH_{k,n} : ils atteignent cette borne et sont kk-connexes.

  • Si kk est pair : placer les sommets sur un cercle et relier chacun aux k/2k/2 voisins précédents et aux k/2k/2 suivants (modulo nn).
  • Exemple : H2,6=C6H_{2,6}=C_6 a 6 sommets, 6 arêtes et est 2-connexe.
  • Si kk est impair : construction légèrement différente ; même borne optimale.

Limite : trouver un MST est efficace avec Kruskal/Prim ; rechercher un sous-graphe kk-connexe de poids minimum dans un graphe pondéré général est un problème nettement plus difficile.

3.10 Identifier la bonne méthode dans un énoncé

Section intitulée « 3.10 Identifier la bonne méthode dans un énoncé »
Signal dans l’énoncéOutil ou résultat pertinent
Explorer des sommets accessiblesBFS / DFS
Trouver une distance en nombre d’arêtesBFS
Vérifier la forte connexité orientéeDeux explorations : graphe puis transposé
Graphe connexe, sans cycle, n−1n-1 arêtesCaractérisations des arbres
Relier tous les sommets au coût total minimalMST : Kruskal ou Prim
Justifier un choix gloutonCoupe + échange d’arêtes
Compter les arbres couvrants de KnK_nCayley : nn−2n^{n-2}
Compter des arbres couvrants d’un graphe quelconqueSuppression-contraction
Maintenir un réseau après des pannesκ(G)\kappa(G) / λ(G)\lambda(G), coupes
Exiger plusieurs chemins indépendantsMenger
Réseau kk-connexe avec très peu d’arêtesBorne ⌈kn/2⌉\lceil kn/2\rceil, Harary

Si l’énoncé parle de…Penser à…
somme des degrés, nombre d’arêtespoignées de main
même liste de degrésinvariant utile, mais pas preuve d’isomorphisme
relier tous les sommets, nombre de composantesconnexité
chaque arête exactement une foisEuler / Hierholzer / Fleury
0 ou 2 sommets de degré impairparcours eulérien
absence de cycle impairgraphe biparti
chaque sommet exactement une foishamiltonien — chapitre ultérieur
poids non négatifs, source, distance minimaleDijkstra
mise à jour min⁡(ℓ(v),ℓ(u)+w(uv))\min(\ell(v),\ell(u)+w(uv))relaxation de Dijkstra
toutes les arêtes de même poidsBFS
min⁡\min à la place de ++ et ++ à la place de ×\timessemi-anneau (min⁡,+)(\min,+)