Le problème de chemin le plus long est NP-difficile. La preuve (typique?) Repose sur une réduction du problème du chemin hamiltonien (qui est NP-complet). Notez qu'ici, le chemin est considéré comme (nœud-) simple. Autrement dit, aucun sommet ne peut apparaître plus d'une fois dans le chemin. Évidemment, il est donc également simple (aucun bord ne se produira plus d'une fois dans le chemin).
Que se passe-t-il si nous abandonnons l'exigence de trouver un chemin simple (nœud) et que nous nous en tenons à trouver un chemin simple (piste). À première vue, comme il est beaucoup plus facile de trouver un sentier eulérien que de trouver un chemin hamiltonien, on pourrait espérer qu'il serait plus facile de trouver le chemin le plus long que de trouver le chemin le plus long. Cependant, je ne trouve aucune référence le prouvant, sans parler de celle qui fournit un algorithme.
Notez que je suis au courant de l'argument avancé ici: /programming/8368547/how-to-find-the-longest-heaviest-trail-in-an-undirected-weighted-graph Cependant, l'argument semble imparfait dans sa forme actuelle, car il montre essentiellement que vous pouvez résoudre le cas de bord simple en résolvant le cas de nœud simple sur un graphique différent (la réduction est donc dans le mauvais sens). Il n'est pas certain que la réduction puisse facilement être modifiée pour fonctionner également dans l'autre sens. (Pourtant, cela montre qu'au moins le problème des sentiers les plus longs n'est pas plus difficile que le problème des chemins les plus longs.)
Existe-t-il des résultats connus pour trouver les sentiers les plus longs (sentiers simples)? Complexité (classe)? Algorithme (efficace)?
Réponses:
D'après les commentaires ci-dessus: le problème du cycle hamiltonien reste NP-complet même dans les graphiques de grille avec un degré maximum 3 [1], mais dans ces graphiques, chaque traversée d'un nœud nécessite deux bords et au plus un bord reste inutilisé, donc un nœud ne peut pas être traversé deux fois par un chemin eulérien.
Donc, apparemment, il y a une réduction immédiate du problème du cycle hamiltonien à votre problème: étant donné un graphique de grille avec un degré maximum 3 , demandez simplement une traînée de longueur.G = ( V, E) | V|
Mais les trois bords du nœud à la fin du chemin peuvent être utilisés; pour éviter cette situation, vous pouvez choisir le nœud supérieur gauche du graphique en grille (qui a le degré deux) et ajouter deux nœuds: et de nouveaux bords et demander une traînée de longueur : de manière informelle, le bord ajouté force à être les extrémités du chemin.u V′= V∪ { u′, u′ ′} E= E∪ { ( u , u′) , ( u , u′ ′) } | V′| = | V| +2 u′, u′ ′
[1] Christos H Papadimitriou, Umesh V Vazirani, Sur deux problèmes géométriques liés au problème du voyageur de commerce, Journal of Algorithms, Volume 5, Numéro 2, juin 1984, Pages 231-246, ISSN 0196-6774
la source