đ ĂnoncĂ© du problĂšme / Cadre d'Ă©tude
đ ĂnoncĂ© du problĂšme / Cadre dâĂ©tude
Section titled âđ ĂnoncĂ© du problĂšme / Cadre dâĂ©tudeâDans le cadre de lâĂ©tude de la complexitĂ© des algorithmes, on sâintĂ©resse aux classes de complexitĂ© et , ainsi quâĂ la notion de rĂ©duction polynomiale et de complĂ©tude. Cet exercice propose dâĂ©tudier un problĂšme classique de graphes, le problĂšme du Chemin Hamiltonien.
Soit un graphe non orientĂ©, oĂč est lâensemble des sommets et lâensemble des arĂȘtes. Un chemin hamiltonien dans est un chemin simple qui visite chaque sommet de exactement une fois.
On définit le problÚme décisionnel (HP) de la maniÚre suivante :
- EntrĂ©e : Un graphe non orientĂ© , un sommet de dĂ©part et un sommet dâarrivĂ©e .
- Question : Existe-t-il un chemin hamiltonien dans allant de Ă ?
On rappelle quâun problĂšme de dĂ©cision appartient Ă la classe sâil existe un algorithme dĂ©terministe polynomial en temps (le vĂ©rifieur) qui, Ă©tant donnĂ© une instance de et un certificat de taille polynomiale en la taille de , vĂ©rifie en temps polynomial si est une solution valide pour .
Section titled âOn rappelle quâun problĂšme de dĂ©cision Î \PiÎ appartient Ă la classe NP\text{NP}NP sâil existe un algorithme dĂ©terministe polynomial en temps (le vĂ©rifieur) qui, Ă©tant donnĂ© une instance III de Î \PiÎ et un certificat ccc de taille polynomiale en la taille de III, vĂ©rifie en temps polynomial si ccc est une solution valide pour III.ââ Questions progressives
Section titled ââ Questions progressivesâ-
(Rappels et dĂ©finitions) PrĂ©ciser la dĂ©finition de la classe et de la classe . Quelle est lâinclusion triviale entre ces deux classes ? Quel est le plus grand dĂ©fi thĂ©orique ouvert associĂ© Ă ces classes ?
-
(Appartenance à NP) Démontrer que le problÚme appartient à la classe . Précisez clairement la nature du certificat et la complexité du vérifieur associé.
-
(RĂ©duction polynomiale) Soit et deux problĂšmes de dĂ©cision. Rappeler la dĂ©finition de « se rĂ©duit polynomialement à » (notĂ© ). Quel est lâintĂ©rĂȘt fondamental de cette notion pour lâĂ©tude des problĂšmes -complets ?
-
(Ătude dâun problĂšme restreint) On considĂšre un sous-problĂšme de HP oĂč le graphe est un DAG (Directed Acyclic Graph) orientĂ©, notĂ© \text{DAG-\text{L}\text{ONGEST-\text{P}\text{ATH}}.
- Montrer que le problÚme du plus long chemin dans un graphe général est -difficile.
- Expliquer pourquoi, curieusement, ce mĂȘme problĂšme se rĂ©sout en temps polynomial si le graphe est un DAG (en utilisant un tri topologique).
-
(Algorithmique - ImplĂ©mentation Python) Ăcrire une fonction Python rĂ©cursive avec mĂ©moĂŻsation (ou programmation dynamique sur un DAG) permettant de calculer la longueur du plus long chemin Ă partir dâun sommet dans un DAG pondĂ©rĂ©.
đĄ Pistes & Indications mĂ©thodologiques
Section titled âđĄ Pistes & Indications mĂ©thodologiquesâ- Pour la Q2 : Pensez Ă ce quâun âcertificatâ intuitif reprĂ©sente pour un chemin : une liste ordonnĂ©e de sommets. Ăvaluez le temps nĂ©cessaire pour vĂ©rifier si cette liste forme un chemin valide (arĂȘtes existantes) et visite chaque sommet une et une seule fois.
- Pour la Q3 : La rĂ©duction doit ĂȘtre calculable par une machine de Turing en temps polynomial. Si et que , alors .
- Pour la Q4 : Pour les DAGs, lâabsence de cycles permet dâappliquer une structure dâordre (tri topologique) idĂ©ale pour la programmation dynamique, Ă©vitant lâexplosion combinatoire propre aux graphes gĂ©nĂ©raux.
- Pour la Q5 : Utilisez un dictionnaire pour stocker les rĂ©sultats intermĂ©diaires (mĂ©moĂŻsation) lors de lâexploration des successeurs dans le DAG.
đ CorrigĂ© dĂ©taillĂ© pas Ă pas
Section titled âđ CorrigĂ© dĂ©taillĂ© pas Ă pasâ1. DĂ©finitions de et
Section titled â1. DĂ©finitions de P\text{P}P et NP\text{NP}NPâ- La classe (Polynomial time) regroupe tous les problĂšmes de dĂ©cision qui peuvent ĂȘtre rĂ©solus par une machine de Turing dĂ©terministe (ou un algorithme classique) en un temps pour un entier fixĂ©, oĂč est la taille de lâentrĂ©e.
- La classe (Nondeterministic Polynomial time) regroupe les problĂšmes de dĂ©cision pour lesquels une solution (un certificat) peut ĂȘtre vĂ©rifiĂ©e en temps polynomial par un algorithme dĂ©terministe.
- Inclusion : On a trivialement , car si on sait résoudre un problÚme en temps polynomial, on peut aussi vérifier une solution en temps polynomial (en ignorant le certificat et en résolvant directement le problÚme).
- ProblÚme ouvert : Le problÚme fondamental non résolu en informatique théorique est de savoir si ou .
2. Appartenance de Ă
Section titled â2. Appartenance de HAMILTONIAN-PATH\text{H}\text{AMILTONIAN-\text{P}\text{ATH}}HAMILTONIAN-PATH Ă NP\text{NP}NPâPour montrer que , construisons le vĂ©rifieur :
- Certificat : Une suite ordonnée de sommets .
- Taille du certificat : La taille est de lâordre de , ce qui est polynomial par rapport Ă la taille de lâinstance du graphe .
- Vérification : Le vérifieur effectue les contrÎles suivants en temps polynomial :
- Vérifier que et .
- Vérifier que (le chemin visite tous les sommets).
- VĂ©rifier que les sommets du certificat sont tous distincts (utilisation dâun ensemble/hashset en ).
- Pour tout , vĂ©rifier que lâarĂȘte appartient bien Ă (en ou via une matrice dâadjacence en par test). Lâensemble de ces vĂ©rifications sâexĂ©cute en , soit un temps polynomial. Par consĂ©quent, .
3. Définition et utilité de la réduction polynomiale
Section titled â3. DĂ©finition et utilitĂ© de la rĂ©duction polynomialeâ- DĂ©finition : Soit et deux problĂšmes de dĂ©cision. On dit que se rĂ©duit polynomialement Ă (notĂ© ) sâil existe une fonction calculable par une machine de Turing en temps polynomial telle que, pour toute instance :
- UtilitĂ© : Si et que , alors . De mĂȘme, cela permet de propager la -complĂ©tude : si est -difficile et , alors est Ă©galement -difficile.
4. Ătude du plus long chemin : Graphe gĂ©nĂ©ral vs DAG
Section titled â4. Ătude du plus long chemin : Graphe gĂ©nĂ©ral vs DAGâ- Graphe gĂ©nĂ©ral : Le problĂšme gĂ©nĂ©ral du plus long chemin est -difficile (il contient le problĂšme du voyageur de commerce ou le problĂšme du chemin hamiltonien comme cas particuliers lorsque la longueur maximale recherchĂ©e est ).
- Cas du DAG : Dans un DAG (graphe orientĂ© sans cycle), lâabsence de cycles permet dâutiliser un tri topologique des sommets. On peut dĂ©finir une relation de rĂ©currence optimale sur les sous-problĂšmes, menant Ă un algorithme de programmation dynamique sâexĂ©cutant en .
5. Implémentation Python pour le plus long chemin dans un DAG
Section titled â5. ImplĂ©mentation Python pour le plus long chemin dans un DAGâVoici lâalgorithme utilisant la programmation dynamique avec mĂ©moĂŻsation (descendante) :
def longest_path_dag(graph, weights, start): """ Calcule la longueur du plus long chemin Ă partir du sommet 'start' dans un DAG. - graph : dict reprĂ©sentant les listes d'adjacence {u: [v1, v2, ...]} - weights : dict associant un poids Ă chaque arĂȘte {(u, v): poid} - start : sommet de dĂ©part """ memo = {}
def dfs(u): if u in memo: return memo[u]
# Si le sommet n'a pas de successeurs if not graph.get(u): return 0
max_dist = 0 for v in graph[u]: dist = weights.get((u, v), 0) + dfs(v) if dist > max_dist: max_dist = dist
memo[u] = max_dist return max_dist
return dfs(start)