Problème du couplage dans un graphe

Le problème de couplage peut être défini ainsi :

Définition

Soit $G=(V, E)$ un graphe. Un couplage est un ensemble $M \subseteq E$ tel que si $xy, x'y' \in E$ alors $xy \cap x'y' = \varnothing$ (le degré de tout sommet du graphe $G'=(V, M)$ est strictement inférieur à 2).

Un sommet $x$ est :

  • libre s'il n'est pas extrémité d'une arête de $M$.
  • couvert s'il est extrémité d'une arête de $M$.

Dans un couplage tout extrémité d'une arête n'apparaît qu'une seule fois. Par exemple, le graphe ci-dessous :

couplage exemple

Admet l'ensemble des arêtes rouges comme couplage :

couplage exemple

On définit plusieurs types de couplages selon le graphe :

Définition

Soit $G=(V, E)$ un graphe. Un couplage $M$ est dit :

  • maximal s'il n'existe pas de couplage $M'$ l'incluant (toute arête de $G$ possède une extrémité co;;une avec une arête de $M$)
  • maximum s'il n'existe pas de couplage $M'$ tels que $\vert M'\vert > \vert M\vert$
  • parfait si pour tout sommet de $V$ il existe une arête de $M$ l'ayant comme extrémité. Un couplage parfait ne peut exister que s'il y a un nombre pair de sommet et à forcément $\vert V \vert/2$ arêtes.

Définition

Pour tout graphe $G=(V, E)$, on note $\nu(G)$ le nombre d'arête de ses couplages maximum.

Les trois types de couplages sont bien distincts. Le couplage de la figure précédente était maximal (toute arête du graphe à un sommet commun avec une arête du couplage), mais il n'est pas maximum. Il possède en effet un couplage parfait :

couplage exemple parfait

Montrez que le graphe précédent admet un autre couplage parfait.

solution

couplage exemple parfait 2

Algorithme glouton

Le problème du couplage admet un algorithme glouton très simple permettant de trouver un couplage acceptable puisqu'à performance garantie :


algorithme couplage_glouton(G: Graphe<Sommet>)  { {Sommet} }
   M := { {Sommet} }
   M pour chaque arête xy de G:
      si x et y ne sont pas couverts par M:
         M  M ∪ { xy }

Cet algorithme est très simple et il est clair qu'il peut trouver un couplage maximum s'il prend les arêtes dans un bon ordre. Mais même si l'ordre est quelconque il ne peut pas être si mauvais que ça :

Proposition

L'algorithme précédent est à performance garantie de $1/2$ (il a au pire 2 fois moins d'arêtes qu'un couplage maximum).

preuve

Il est tout d'abord clair que le couplage $M$ obtenu par l'algorithme est maximal puisque toute arête rejetée possède une de ses extrémité couverte par $M$. De là, si $M^\star$ un couplage maximum alors chacune de ses arêtes a au moins 1 de ses sommets couvert par $M$ (soit l'arête est dans $M$ soit elle a été rejetée au cours de l'algorithme).

Donc au moins la moitié ($\frac{1}{2}$) des sommets couverts par $M^\star$ ($2 \cdot \vert M^\star \vert$) sont couverts par les sommets de $M$ ($2\cdot \vert M \vert$), on a ainsi $\frac{1}{2}\cdot(2 \cdot \vert M^\star \vert) \leq 2 \cdot \vert M \vert$ ce qui conclut la preuve.

L'exercice suivant montre que la 1/2 performance garantie est atteinte quelque soit la taille du graphe.

Montrez que quelques soit $n$, il existe un graphe connexe à plus de $n$ sommets tel que l'algorithme peut trouver 2 fois moins d'arête que son couplage maximum.

corrigé

On peut prendre un graphe qui est une successions d chemins de longueur 3 comme celui-ci :

exemple 2 fois moins

Si l'algorithme prend systématiquement l'arête au milieu du chemin, son couplage sera de taille deux fois plus petite que le couplage prenant les extrémités de chaque chemin.

Cet algorithme glouton montre que si l'on cherche rapidement une solution (l'algorithme est linéaire en la taille du graphe) on peut le faire sans grand risque de tomber trop à côté de la solution optimale.

Couplage et couvertures

Couplage maximum et couverture minimale sont deux problèmes intimement liés. En effet :

Proposition

Si $M$ est un couplage et $K$ une couverture d'un graphe, on a évidemment $\vert M \vert \leq \vert K \vert$.

preuve

S'il existait une couverture à strictement moins de $\vert M \vert$ sommets, il existerait une arête $xy$ de $M$ dont aucun des sommets ne serait dans la couverture, ce qui est impossible (puisque $xy$ est ue arête du graphe).

On a alors immédiatement la proposition suivante :

Proposition

Soit $G=(V, E)$ un graphe. La cardinalité minimum de ses couvertures est plus grande la cardinalité maximum de ses couplages.

Attention, ce n'est pas forcément égal dans le cas général.

En reprenant notre exemple de départ, le graphe admet un couplage parfait à 5 arêtes alors que la plus petite couverte possède 6 sommets :

couverture min

Mais ce lien nous permet déjà de trouver une 2-approximation au problème de la couverture :

Proposition

Soit $G=(V, E)$ un graphe et $M=\{x_1y_1, \dots, x_ky_k\}$ un de ses couplages obtenu par l'algorithme glouton.

Alors :

  • l'ensemble $K = \cup_{k} \{ \{x_i, y_i\} \}$ est une couverture de $G$
  • toute couverture de $G$ possède au moins $k$ sommets.

preuve

  1. S'il existait une arête $uv$ dans le graphe tels que $u$ et $v$ soient ouvert dans $M$, alors l'algorithme glouton l'aurait prise.
  2. vient de la première proposition de cette partie qui montre que $\vert M\vert \leq \vert K\vert$.

Exemples

Trouver des binômes

Dans les exercices de modélisation par des flots, le problème du transport amoureux permettait de résoudre un problème de couplage. Marier le plus de héros de roman revient à trouver un couplage maximum dans le graphe des affinités (une arête entre deux héros s'ils s'apprécient) :

couplage transport amoureux 1

Et on obtenant le couplage parfait suivant :

couplage transport amoureux 2

On a cependant vu que cette modélisation ne fonctionne que si l'on a deux populations distinctes (ici les garçons et les filles) à coupler. Si ce n'est pas le cas (coupler 2 garçons ou deux filles ensembles) on ne peut plus modéliser le problème de couplage par des flots.

On verra dans ce cours que c'est polynomialement facile à faire même si l'algorithme ne l'est pas tant que ça (facile).

Championnat de sport

Dans un championnat de sports où deux équipes s'affrontent tout à tour, il est nécessaire de trouver un couplage des différentes équipes pour une ronde, mais également que toute équipe ne rencontre pas une équipe déjà vue. Il faut donc ici trouver non pas 1 couplage parfait (ce qui serait facile) mais $n-1$ tous différents de telle sorte que chaque équipe rencontre chacune des autres équipes.

L'algorithme est le suivant, pour $n$ pair :

Les deux équipes $i < j$ jouent ensembles à la ronde $r$ si :

L'équipe $i$ est à domicile si :

Si $j = n-1$ Ok. Elle va être à domicile une fois sur 2 et va jouer avec l'équipe $i$ à la ronde $i$. Sinon, Ok aussi :

Pour les match impair, l'équipe $n-1$ fait office d'équipe fantôme : les équipe qui devraient l'affronter ne jouent pas.

i j< 5 i + j i à domicile
0 1 1 OUI
0 2 2 NON
0 3 3 OUI
0 4 4 NON
1 2 3 OUI
1 3 4 NON
1 4 0 OUI
2 3 0 OUI
2 4 1 NON
3 4 2 OUI

Et pour l'équipe $n-1$ :

i j=5 2i i à domicile
0 5 0 OUI
1 5 2 OUI
2 5 4 OUI
3 5 1 NON
4 5 3 NON

Ce qui donne par ronde avec l'équipe à domicile en premier:

On reverra plus tard cet exemple en montrant qu'on peut le modéliser comme un problème de coloration d'arêtes du graphe complet.