Problèmes de décision et problèmes de calcul version du 21 novembre 2016 41 6 — PROBLÈMES DE DÉCISION ET PROBLÈMES DE CALCUL §6.1 - Problème de décision et problème de calcul associés. 6.1 – Beaucoup de problèmes de décision posent une question sur l’existence d’un objet particulier. Il n’est pas nécessaire pour résoudre un tel problème de produire cet objet. Voir l’exemple de 2-SAT résolu via une question structurelle sur un graphe orienté associé (chapitre 4). – Inversement, il y a des situations où on a besoin non seulement de savoir si un tel objet existe, mais aussi de le connaître en détails. Par exemple, dans le cas de SAT, on peut avoir besoin, si la famille de clauses peut être satisfaite, de savoir quelles valeurs on peut affecter aux variables pour effectivement satisfaire toutes les clauses. – Ainsi, dans la plupart des situations, un problème de calcul et un problème de décision peuvent être naturellement associés. 6.2 – Exemple. – Le problème de décision précède le problème du calcul. Dans le cas du problème de décision 2-SAT, le problème de calcul associé est V2-SAT Entrée Question n ∈ IN ∗ , F formule en n variables, sous forme f.n.c. avec clauses de degré 2. Trouver, si elle existe, v fonction de vérité satisfaisant F . : : 6.3 – Exemple. – Le problème du calcul précède le problème de décision. Un problème de calcul ne provient pas nécessairement du raffinement d’un problème de décision. Par exemple : CFC Entrées Question : : n ∈ IN ∗ , G graphe orienté d’ordre n et s un sommet Quelle est la composante fortement connexe de s ? Dans un graphe orienté, il est naturel de se demander quelle est la composante fortement connexe d’un sommet particulier. Le problème de calcul, ici, consiste à calculer une fonction. L’image, par cette fonction, d’un sommet du graphe, est sa composante fortement connexe ; i.e. l’ensemble des sommets qui sont sur un même circuit que le sommet considéré. Donc le problème de décision suivant est associé au problème CFC. CIRCUIT Entrées Question : : n ∈ IN ∗ n, G graphe orienté d’ordre n et s, t deux sommets Y a-t-il dans G un circuit passant par s et t ? 6.4 – Exemple. On a vu que si on sait résoudre efficacement CFC alors on sait résoudre efficacement 2-SAT. Mais il suffit de savoir résoudre rapidement le problème de décision CIRCUIT pour savoir résoudre rapidement 2-SAT. Car l’algorithme Donnée F formule sous f.n.c. avec clauses de degré 2 Algo 1 - Calculer le graphe d’implications GF de F . 2 - Pour chaque variable x de F , tester CIRCUIT(GF , x, x̄) si oui −→ écrire non et fin. 3 - Écrire oui et fin. résout efficacement 2-SAT en faisant appel à un algorithme rapide résolvant CIRCUIT. 6.5 – Remarques. – Attention, cet algorithme n’est pas une réduction, et ce n’est pas une preuve du fait que 2-SAT6P CIRCUIT. Mais la relation 2-SAT6P CIRCUIT est vérifiée puisque 2-SAT est dans P ∗ (proposition 2 page 38) 6.6 – Exemple (suite). Dans le cas d’une réponse positive, l’algorithme décrit ci-dessus ne fournit pas de fonction de vérité qui satisfait F . Pour en trouver une, on avait eu besoin de calculer les composantes fortement connexes de GF , i.e. de résoudre CFC. Le problème de calcul V2-SAT, associé au problème de décision 2-SAT, peut donc être résolu (efficacement) si on sait résoudre (efficacement) CFC. Ainsi, pour les problèmes de décision : CIRCUIT permet de résoudre 2-SAT. pour les problèmes de calcul : CFC permet de résoudre V2-SAT. 42 Complexité Algorithmique – B. Mariou – Automne 2016 version du 21 novembre 2016 §6.2 - Résoudre le problème de décision et le problème de calcul associés. 6.7 – Exemples. I Résoudre V2-SAT permet évidemment de résoudre 2SAT. I Mais aussi CFC permet de résoudre CIRCUIT, grâce à l’algorithme suivant : Données G graphe orienté, s, t des sommets. Algo 1 - Calculer C la composante fortement connexe de s : résoudre CF C(G, s) 2 - tester si t ∈ C. si t ∈ C −→ écrire oui et fin. si t ∈ / C −→ écrire non et fin. 6.8 – Le problème de calcul est, a priori plus difficile que le problème de décision associé, mais le problème de décision permet, en général, de résoudre le problème de calcul associé. 6.9 – Exemples. I Résolution de CFC qui utilise une solution de CIRCUIT Données G graphe orienté, s un sommet Algo 1 - C ← {s} 2 - Pour tout t ∈ G, t 6= s lancer CIRCUIT(G, s, t). si la réponse est oui, alors C ← C ∪ {t}. I De même, on peut trouver une résolution de VSAT à partir d’une solution de SAT : Donnée F formule sous forme f.n.c. 1 - Tester si F est satisfaisable : ? SAT(F) ? Algo si non −→ écrire non et fin 2 - S = ensemble des clauses de F 3 - Considérer les variables de F : x1 , x2 , . . . , xn 4 - Pour 1 6 i 6 n, choisir entre v(xi ) = 0 et v(xi ) = 1 de la façon suivante : pour essayer v(xi ) = 1, on fabrique un ensemble T de clauses à partir de S - toute clause de S contenant xi est éliminée - dans toute clause avec xi et sans xi , on supprime xi - les autres clauses sont conservées remarque : xi n’est pas une variable de T tester si T est satisfaisable ? SAT(T) ? si oui −→ on garde v(xi ) = 1 et S ← T si non −→ on prend v(xi ) = 0 et S est modifié ainsi - les clauses avec xi sont éliminées - dans chaque clause avec xi et sans xi , on enlève xi - on garde les autres clauses. Dans le cas où F est satisfaisble, à chaque étape, S est modifié de sorte que le nouvel ensemble a une variable de moins que le précédent et il est encore satisfaisable. 6.10 – On n’a pas vu ici des réductions, ni des réductions polynomiales, au sens strict. Mais dans chaque exemple, si le temps calcul de l’algorithme connu est T (n), alors le temps de calcul de l’algorithme fabriqué est de l’ordre de nT (n). En particulier, si T (n) est borné par un polynome, alors nT (n) aussi. §6.3 - Exemples. Dans les exemples suivants, on peut appliquer des raisonnements similaires pour montrer que le problème de décision permet de résoudre la problème de calcul associé, avec un temps de calcul comparable. 6.11 – Le problème SAT concerne la satisfaisabilité d’une forme normale conjonctive F . Le problème de calcul associé vSAT demande de fournir une fonction de vérité qui satisfait F , s’il en existe. 6.12 – De même, au problème de coloration en k couleurs, k-COL, est associé le problème de calcul k-COLc , qui demande de fournir une k-coloration du graphe, s’il en existe. 6.13 – De même, au problème du mariage en m dimensions, m-MAR, est associé le problème m-MARc qui demande de trouver un appariement maximal lorsqu’il en existe un. La classe N P 43 version du 21 novembre 2016 6.14 – Le problème suivant est un problème de décision très classique. HAMILTON Entrées Question : : n entier naturel, G graphe non orienté d’ordre n Existe-t-il, dans G, un cycle hamiltonien i.e. qui passe exactement une fois par chaque sommet ? Le problème de calcul qui lui est naturellement associé, HAMILTONc demande qu’on fournisse un cycle hamiltonien, s’il en existe un. 6.15 – Exemple typique de problème d’optimisation (cas particulier de calcul) : ENS INDEPmax Entrées Question : : n entier naturel, G graphe non orienté d’ordre n. Trouver un ensemble de sommets indépendants, i.e. sans arête, de taille maximale. Le problème de décison associé doit comporter un paramètre supplémentaire : ENS INDEP Entrées Question : : n entier naturel, G graphe non orienté d’ ordre n et k 6 n Existe-t-il un ensemble de k sommets indépendants ? On peut encore résoudre facilement le problème de calcul si on a des algorithmes rapides résolvant les problèmes de décision associés (exercices ci-dessous). §6.4 - Exercices. Exercice 50 Expliquez en détail, comme cela a été fait en cours (page 42), comment un algorithme résolvant le problème de décision SAT peut être utilisé pour fabriquer un algorithme résolvant le problème de calcul VSAT. Exprimez la complexité de l’algorithme de calcul en fonction de celle de l’algorithme de décision. Exercice 51 Inspirez-vous de l’exercice précédent pour imaginer comment on peut utiliser un algorithme résolvant le problème de décision m-MAR pour fabriquer un algorithme résolvant le problème de calcul m-MARc (voir page 42). Exercice 52 On veut obtenir un résultat analogue pour les problèmes HAMILTON (décision) et HAMILTONc (calcul), relatifs aux circuits hamiltoniens dans un graphe non orienté (voir ci-dessus). On imagine qu’on a un algorithme A permettant de déterminer si un graphe est hamiltonien ou pas (i.e. s’il a un circuit hamiltonien) et on voudrait l’utiliser pour construire un algorithme qui trouve un chemin hamiltonien, quand il y en a un. On considère un graphe fini, non orienté, et un de ses sommets v. Toute la difficulté est de déterminer où se situe v dans le parcours hamiltonien i.e. quel sommet le précède et quel sommet lui succède, ou encore par quelle arête on peut arriver à v et par quelle arête on peut repartir de v. a) Considérons deux voisins w0 , w1 de v. Considérons le graphe obtenu en supprimant toutes les arêtes portés par v sauf (v, w0 ) et (v, w1 ), qu’on appelle G[w0 vw1 ] . Montrez que si G[w0 vw1 ] est hamiltonien alors G aussi et G a un circuit hamiltonien passant par les arêtes (w0 , v) et (v, w1 ). b) Réciproquement, montrez que si G est hamiltonien alors il existe deux voisins w0 6= w1 de v tels que G[w0 vw1 ] est aussi hamiltonien. c) Si on choisit un sommet de départ v0 , montrez comment on peut trouver un circuit hamiltonien (s’il en existe un), en devinant la liste de parcours des sommets, de proche en proche, grâce à l’algorithme de décision A. Décrivez un algorithme B, qui utilise des appels à A, pour fabriquer, quand il en existe, un circuit hamiltonien. Quelle est la complexité de B en fonction de celle de A. Exercice 53 On se fixe le même objectif pour ENS INDEPmax (trouver un sous-graphe indépendant de taille maximale) grâce à un algorithme A résolvant le problème de décision ENS INDEP (existence d’un sous-graphe indépendant de taille k fixée, voir ci-dessus). a) Soit G un graphe non orienté et fini. Montrez que, par itération de A, on peut déterminer la taille maximale K d’un sous-graphe indépendant de G. b) Soit v un sommet de G et k ∈ IN ∗ . Appelons G\v le graphe obtenu en supprimant dans G le sommet v et tous ses voisins, ainsi que les arêtes qu’ils portent. Montrez que v appartient à un sous-graphe indépendant d’ordre k de G ssi G\v a sous-graphe indépendant d’ordre k − 1. c) Proposez un algorithme B, utilisant des appels à A, et permettant de construire, sommet par sommet, un sousgraphe de G indépendant et de taille maximale. Évaluez la complexité de B par rapport à celle de A.