1/25 Problèmes de décision Johanne Cohen1 1 PRISM/CNRS, Versailles, France. 1 2/25 Référence 2 Plan Couplage Couplage Définition Un chemin augmentant/alternant L’algorithme calculant un couplage maximum Graphe contracté et chemin augmentant Algorithme calculant un chemin augmentant de M L’algorithme d’Edmonds (1965) Graphes hamiltoniens et euleriens 3/25 3 Plan Couplage Couplage Définition Un chemin augmentant/alternant L’algorithme calculant un couplage maximum Graphe contracté et chemin augmentant Algorithme calculant un chemin augmentant de M L’algorithme d’Edmonds (1965) Graphes hamiltoniens et euleriens 4/25 4 5/25 Définition d’un couplage Soit un graphe simple non orienté G = (V , E ) Un couplage M est un ensemble d’arêtes deux à deux non adjacentes : ∀(a, a0 ) ∈ M 2 , a 6= a0 ⇒ a ∩ a0 = ∅ . Terminologies : • Les sommets incidents à une arête de G sont les sommets couplés, apparié ou couverts par M. • Le couplage M sature U, si U est un ensemble des sommets couplés par M. 5 6/25 Les différents couplages • Un couplage maximal est un couplage M ayant la propriété que si une arête e est ajoutée, alors M ∪ {e} n’en est pas. • Un couplage maximum est un couplage contenant le plus grand nombre possible d’arêtes. Un graphe peut posséder plusieurs couplages maximum. Couplage maximal Couplage maximum 6 7/25 Un chemin augmentant/alternant Soit un graphe simple non orienté G = (V , E ). Soit M un couplage de G . • Un chemin alternant est un chemin dans lequel les arêtes appartiennent alternativement à M et à E \M. • Un chemin augmentant est un chemin alternant qui commence et se finit par un sommet non-apparié. Les arêtes en rouge sont dans M. 7 8/25 Propriété Si M un couplage (arêtes en rouge) ayant un chemin augmentant P, alors le couplage M 0 = M∆P posséde plus d’arêtes Remarque : S’il y a un chemin augmentant pour M, alors M n’est pas maximum. 8 Chemin augmentant et couplage maximun Theorem [Berge 1957] Soit M un couplage dans un graphe G . M est maximum si et seulement si il n’existe pas de chemin augmentant Preuve : • Soit M et M 0 des couplages non-maximun et maximun resp. • Soit H le sous-graphe de G induit par les arêtes de M∆M 0 . Les composantes connexes de H sont des cycles ou des chemins où les arêtes de M et M 0 alternent. Donc le graphe G 9/25 9 Chemin augmentant et couplage maximun Theorem [Berge 1957] Soit M un couplage dans un graphe G . M est maximum si et seulement si il n’existe pas de chemin augmentant Preuve : • Soit M et M 0 des couplages non-maximun et maximun resp. • Soit H le sous-graphe de G induit par les arêtes de M∆M 0 . Les composantes connexes de H sont des cycles ou des chemins où les arêtes de M et M 0 alternent. Donc M = arêtes vertes le graphe G 9/25 9 Chemin augmentant et couplage maximun Theorem [Berge 1957] Soit M un couplage dans un graphe G . M est maximum si et seulement si il n’existe pas de chemin augmentant Preuve : • Soit M et M 0 des couplages non-maximun et maximun resp. • Soit H le sous-graphe de G induit par les arêtes de M∆M 0 . Les composantes connexes de H sont des cycles ou des chemins où les arêtes de M et M 0 alternent. Donc M 0 = arêtes violettes le graphe G 9/25 9 Chemin augmentant et couplage maximun Theorem [Berge 1957] Soit M un couplage dans un graphe G . M est maximum si et seulement si il n’existe pas de chemin augmentant Preuve : • Soit M et M 0 des couplages non-maximun et maximun resp. • Soit H le sous-graphe de G induit par les arêtes de M∆M 0 . Les composantes connexes de H sont des cycles ou des chemins où les arêtes de M et M 0 alternent. Donc M 0 = arêtes violettes M = arêtes vertes le graphe G 9/25 9 Chemin augmentant et couplage maximun Theorem [Berge 1957] Soit M un couplage dans un graphe G . M est maximum si et seulement si il n’existe pas de chemin augmentant Preuve : • Soit M et M 0 des couplages non-maximun et maximun resp. • Soit H le sous-graphe de G induit par les arêtes de M∆M 0 . Les composantes connexes de H sont des cycles ou des chemins où les arêtes de M et M 0 alternent. Donc M 0 = arêtes violettes M = arêtes vertes le graphe H 9/25 9 Chemin augmentant et couplage maximun Theorem [Berge 1957] Soit M un couplage dans un graphe G . M est maximum si et seulement si il n’existe pas de chemin augmentant Preuve : • Soit M et M 0 des couplages non-maximun et maximun resp. • Soit H le sous-graphe de G induit par les arêtes de M∆M 0 . Les composantes connexes de H sont des cycles ou des chemins où les arêtes de M et M 0 alternent. Donc • pour chaque cycle : # d’arêtes de M 0 = # d’arêtes de M. car les cycles sont de longueur paire. • pour un des chemins P :# d’arêtes de M 0 > # d’arêtes de M. M 0 a plus d’arêtes que M P commence et termine par deux arêtes de M 0 . Donc P est un chemin augmentant pour M. 9/25 9 Plan Couplage Couplage Définition Un chemin augmentant/alternant L’algorithme calculant un couplage maximum Graphe contracté et chemin augmentant Algorithme calculant un chemin augmentant de M L’algorithme d’Edmonds (1965) Graphes hamiltoniens et euleriens 10/25 10 11/25 Graphe contracté Soit un graphe simple non orienté G = (V , E ). La contraction G de l’arête e est le graphe obtenu en fusionnant ses deux extrémités. La figure a été prise sur le site de wikipedia. La contraction d’un chemin est le graphe obtenu en effectuant les contractions de toutes ses arêtes. 11 Blossom Soit M un couplage dans un graphe G . Un cycle B est un blossom si • il possède 2k + 1 arêtes • k de ses arêtes sont dans M 12/25 12 Couplage et contraction Theorem [Edmonds 1965] Soit M un couplage dans un graphe G . Supposons que B est un blossom de G . Soit G 0 le graphe obtenu par la contraction de B dans G . Soit M 0 le couplage de M projeté dans G 0 . G 0 a un chemin augmentant pour M 0 si et seulement si G a un chemin augmentant pour M 13/25 13 14/25 Preuve G0 Soit vM le sommet de représentant la contraction de B. Supposons que le chemin P 0 augmentant pour M 0 contient vB . 1. Si vB est couvert par M 0 , alors Les figures ont été prises sur le site de wikipedia. 14 14/25 Preuve G0 Soit vM le sommet de représentant la contraction de B. Supposons que le chemin P 0 augmentant pour M 0 contient vB . 1. Si vB n’est pas couvert par M 0 , alors Les figures ont été prises sur le site de wikipedia. 14 14/25 Preuve G0 Soit vM le sommet de représentant la contraction de B. Supposons que le chemin P 0 augmentant pour M 0 contient vB . Si P 0 est un chemin augmentant pour M 0 and G , alors il existe un chemin augmentant pour M dans G . Et réciproquement. Les figures ont été prises sur le site de wikipedia. 14 arbre alterné Soit M un couplage du graphe G Un arbre T dans G est dit alterné si 1. il existe un unique sommet r non-couvert par M (par convention : c’est la racine) 2. pour tout sommet v couvert par l’arbre T , le chemin de la racine vers v est un chemin alternant Par convention • un sommet v est interne si sa distance de la racine est impaire • un sommet v est externe si sa distance de la racine est paire 15/25 15 16/25 Remarque sur les arbres alternés Soit M un couplage du graphe G . Soit T un arbre alterné. Remarque 1 : Soit v un sommet de T . Si v est adjacent à un sommet w dans G de même type (externe, ou interne), alors le chemin de v vers w dans T plus l’arête (v , w ) forment un blossom. Remarque 2 : Soit v un sommet de T . Si v est adjacent à un sommet w n’appartenant pas à T dans G et non-couvert par M, alors le chemin de r vers v dans T plus l’arête (v , w ) forment une chaine augmentante. 16 Algorithme Construction chemin(un graphe G ,un couplage M) 17/25 1. F ← ∅ ; ∀v ∈ V non-marqué ; seules les arêtes ∈ M marquées. Initialisation des variables 2. retourner ∅ ; 17 Algorithme Construction chemin(un graphe G ,un couplage M) 1. F ← ∅ ; ∀v ∈ V non-marqué ; seules les arêtes ∈ M marquées. 2. pour tout sommet v non-couvert par M faire créer un arbre Tv composé uniquement de v ; F ← F ∪ Tv Initialisation des arbres alternés (un par sommet non-couvert) 3. retourner ∅ ; 17/25 17 Algorithme Construction chemin(un graphe G ,un couplage M) 1. F ← ∅ ; ∀v ∈ V non-marqué ; seules les arêtes ∈ M marquées. 2. pour tout sommet v non-couvert par M faire créer un arbre Tv composé uniquement de v ; F ← F ∪ Tv 3. Tant que ∃v ∈ F non-marqué externe faire 3.1 Tant qu’il existe e = (v , w ) non-marqué de F faire Traitement pour augmenter la forêt pour trouver un chemin augmentant 4. retourner ∅ ; il n’existe aucun chemin augmentant 17/25 17 Algorithme Construction chemin(un graphe G ,un couplage M) 1. F ← ∅ ; ∀v ∈ V non-marqué ; seules les arêtes ∈ M marquées. 2. pour tout sommet v non-couvert par M faire créer un arbre Tv composé uniquement de v ; F ← F ∪ Tv 3. Tant que ∃v ∈ F non-marqué externe faire 3.1 Tant qu’il existe e = (v , w ) non-marqué de F faire 3.1.1 si w ∈ / F alors soit x le sommet apparié à w ajouter (v , w ) et (w , x) à l’arbre contenant v Rencontre pour la première fois w , insertion de w dans F 4. retourner ∅ ; 17/25 17 Algorithme Construction chemin(un graphe G ,un couplage M) 1. F ← ∅ ; ∀v ∈ V non-marqué ; seules les arêtes ∈ M marquées. 2. pour tout sommet v non-couvert par M faire créer un arbre Tv composé uniquement de v ; F ← F ∪ Tv 3. Tant que ∃v ∈ F non-marqué externe faire 3.1 Tant qu’il existe e = (v , w ) non-marqué de F faire 3.1.1 si w ∈ / F alors soit x le sommet apparié à w ajouter (v , w ) et (w , x) à l’arbre contenant v 3.1.2 sinon si w est interne alors (i) si r (v ) 6= r (w ) alors retourner {r (v ) → v , w , → r (w )} Détection d’un chemin entre deux arbres (remarque 2) 4. retourner ∅ ; 17/25 17 Algorithme Construction chemin(un graphe G ,un couplage M) 1. F ← ∅ ; ∀v ∈ V non-marqué ; seules les arêtes ∈ M marquées. 2. pour tout sommet v non-couvert par M faire créer un arbre Tv composé uniquement de v ; F ← F ∪ Tv 3. Tant que ∃v ∈ F non-marqué externe faire 3.1 Tant qu’il existe e = (v , w ) non-marqué de F faire 3.1.1 si w ∈ / F alors soit x le sommet apparié à w ajouter (v , w ) et (w , x) à l’arbre contenant v 3.1.2 sinon si w est interne alors (i) si r (v ) 6= r (w ) alors retourner {r (v ) → v , w , → r (w )} (ii) sinon B ← blossom formé par e et par v → w dans T G 0 , M 0 ← contacter B dans G et M P 0 ← Construction chemin(G 0 , M 0 ) retourner P 0 projeté dans G Détection d’un blossom (traitement comme la remarque 1) 4. retourner ∅ ; 17/25 17 Algorithme Construction chemin(un graphe G ,un couplage M) 1. F ← ∅ ; ∀v ∈ V non-marqué ; seules les arêtes ∈ M marquées. 2. pour tout sommet v non-couvert par M faire créer un arbre Tv composé uniquement de v ; F ← F ∪ Tv 3. Tant que ∃v ∈ F non-marqué externe faire 3.1 Tant qu’il existe e = (v , w ) non-marqué de F faire 3.1.1 si w ∈ / F alors soit x le sommet apparié à w ajouter (v , w ) et (w , x) à l’arbre contenant v 3.1.2 sinon si w est interne alors (i) si r (v ) 6= r (w ) alors retourner {r (v ) → v , w , → r (w )} (ii) sinon B ← blossom formé par e et par v → w dans T G 0 , M 0 ← contacter B dans G et M P 0 ← Construction chemin(G 0 , M 0 ) retourner P 0 projeté dans G 3.1.3 marquer e ; Ne plus traiter e 4. retourner ∅ ; 17/25 17 Algorithme Construction chemin(un graphe G ,un couplage M) 1. F ← ∅ ; ∀v ∈ V non-marqué ; seules les arêtes ∈ M marquées. 2. pour tout sommet v non-couvert par M faire créer un arbre Tv composé uniquement de v ; F ← F ∪ Tv 3. Tant que ∃v ∈ F non-marqué externe faire 3.1 Tant qu’il existe e = (v , w ) non-marqué de F faire 3.1.1 si w ∈ / F alors soit x le sommet apparié à w ajouter (v , w ) et (w , x) à l’arbre contenant v 3.1.2 sinon si w est interne alors (i) si r (v ) 6= r (w ) alors retourner {r (v ) → v , w , → r (w )} (ii) sinon B ← blossom formé par e et par v → w dans T G 0 , M 0 ← contacter B dans G et M P 0 ← Construction chemin(G 0 , M 0 ) retourner P 0 projeté dans G 3.1.3 marquer e ; Ne plus traiter e 3.2 marquer v ; Ne plus traiter v 4. retourner ∅ ; 17/25 17 Algorithme Construction chemin(un graphe G ,un couplage M) 1. F ← ∅ ; ∀v ∈ V non-marqué ; seules les arêtes ∈ M marquées. 2. pour tout sommet v non-couvert par M faire créer un arbre Tv composé uniquement de v ; F ← F ∪ Tv 3. Tant que ∃v ∈ F non-marqué externe faire 3.1 Tant qu’il existe e = (v , w ) non-marqué de F faire 3.1.1 si w ∈ / F alors soit x le sommet apparié à w ajouter (v , w ) et (w , x) à l’arbre contenant v 3.1.2 sinon si w est interne alors (i) si r (v ) 6= r (w ) alors retourner {r (v ) → v , w , → r (w )} (ii) sinon B ← blossom formé par e et par v → w dans T G 0 , M 0 ← contacter B dans G et M P 0 ← Construction chemin(G 0 , M 0 ) retourner P 0 projeté dans G 3.1.3 marquer e ; Ne plus traiter e 3.2 marquer v ; Ne plus traiter v 4. retourner ∅ ; 17/25 17 18/25 L’algorithme d’Edmonds (1965) Algorithme Couplage MAX(G , M) Entrée : un graphe G = (V , E ) , et un couplage de M. Sortie : un couplage M 1. Trouver un chemin P augmentant de M 2. Si il n’en existe pas alors retourner M 3. sinon retourner Couplage MAX(G , M modifié par P) Complexité : O(|V |4 ) car au pire • on construit O(|V |) chemins augmentants • construire un chemin augmentant nécéssite O(|V | × |E |) opérations Il existe des améliorations d’algorithmes de construction de chemins en O(|E |) opérations. 18 Plan Couplage Couplage Définition Un chemin augmentant/alternant L’algorithme calculant un couplage maximum Graphe contracté et chemin augmentant Algorithme calculant un chemin augmentant de M L’algorithme d’Edmonds (1965) Graphes hamiltoniens et euleriens 19/25 19 Graphe eulérien Problème : Partant d’un point de la ville, peut-on se promener, en revenant à son point de départ, en passant une seule fois par tous les ponts ? Figure: La ville de Konigsberg Solution : la ville = graphe où les arêtes sont les ponts. 20/25 20 Graphe eulérien Cycle eulérien Un cycle eulérien est un cycle qui passe une et une seule fois par toutes les arêtes. Graphe eulérien Un graphe est un graphe eulérien s’il possède un cycle eulérien. 21/25 21 Graphe eulérien : propriété Théorème Un graphe est eulérien si et seulement si il est connexe et tous ses sommets sont de degré pair. Preuve : Supposons que G est un graphe connexe dont tous les sommets de degré pair. Par induction sur le nombre d’arêtes • Si G est un unique sommet isolé, alors il est eulérien. • Sinon tous les sommets de G sont de degré ≥ 2. • Ceci implique qu’il existe un cycle sur G . • Considérons le graphe partiel H sans le cycle. • Chaque sommets de H sont de degré pair, on applique l’HR. 22/25 22 23/25 Graphe eulérien : algorithme Théorème Reconnaı̂tre si un algorithme est eulérien peut se faire en un temps polynomial. Preuve : Considérons l’algorithme suivant • Entrée : G = (V , E ) un graphe • Sortie : Un booléen • Instructions : 1. Pour tout sommet v de G 1.1 si v est de degré impair alors retourner FAUX 2. retourner VRAI Complexité : • O(n2 ) (nombre de sommets × le calcul du degré). • O(m) (nombre d’arêtes) 23 24/25 Graphe hamiltonien Cycle hamiltonien Un cycle hamiltonien est un cycle qui passe une et une seule fois par tous les sommets. Graphe hamiltonien Un graphe est un graphe hamiltonien s’il possède un cycle hamiltonien. 24 Graphe hamiltonien : algorithme Théorème Savoir si un cycle est hamiltonien peut se faire en un temps polynomial. Preuve : Considérons l’algorithme suivant • Entrée : un graphe G = (V , E ), un cycle C = (c0 , . . . , ck ) • Sortie : Un booléen • Instructions : 1. Pour tout i allant de 0 à k faire • Si (ci , ci+1 ) n’est pas une arête alors retourner FAUX 2. Pour tout sommet v faire, • si ¬ (v apparait une seule fois dans C ) alors retourner FAUX 3. retourner VRAI Complexité : • O(m) (nombre d’arêtes) 25/25 25