Trouver un cycle négatif avec des contraintes de sommet


11

Étant donné un graphique avec des arêtes pondérées, comment trouver un cycle négatif qui contient au moins un sommet dans un ensemble de sommets donné ? Merci.{V1,V2,,Vk}


Cette question n'est pas très claire. Des poids sur quoi, des arêtes ou des sommets? Qu'est-ce que , est-ce que est un sommet ou un ensemble de sommets? V 1{V1,V2,,Vk}V1
Yixin Cao

@YixinCao Merci d'avoir noté, édité: poids sur les bords, est un sommet. V1
Tianyi Cui

Réponses:


8

Si vous n'avez pas besoin que le cycle soit simple, alors divisez le graphe (dirigé) en ses composants fortement connectés, et pour chaque composant contenant l'un des sommets donnés , vérifiez si le composant contient un cycle négatif. Si aucun composant ne le fait, il n'y a pas de cycle négatif contenant un . Mais si certains composants le font, vous pouvez trouver un cycle négatif (non simple) contenant en prenant de nombreuses copies du cycle négatif et en ajoutant à ces chemins vers et depuis un sommet du cycle vers . (Le temps total pour trouver une représentation implicite du cycle souhaité sera le même que le temps pour trouver un cycle négatif dans un graphique dirigé, par exemple , si je me souviens bien.)V i V i V i O ( n m )ViViViViO(nm)

Si vous avez besoin que le cycle soit simple, alors le problème devient NP-complet, même si un seul sommet est donné. (Vous pouvez réduire le chemin hamiltonien au problème: pour trouver un chemin hamiltonien d'une source donnée à un puits donné dans un graphe donné , donnez le poids des arêtes existantes -1, puis ajoutez un sommet artificiel avec deux arêtes de coût chacun, un de à et un de à .) S T G V 1 N / 2 - 0,01 V 1 S T V 1V1STGV1N/20.01V1STV1

Si vous autorisez le cycle à répéter les sommets mais pas les arêtes, je pense qu'il est toujours NP-complet (par une réduction similaire, mais en divisant chaque sommet en une arête dirigée de manière standard).( v , v )v(v,v)


2
J'aime beaucoup mieux cette réponse que la mienne.
David Eppstein

6

Je vais supposer que votre entrée est un graphique dirigé; Je ne sais pas comment faire cela pour le cas non dirigé.

Faites copies de l'ensemble de sommets de votre graphique, où est le nombre de sommets du graphique. Remplacez chaque arête de à dans votre graphique d'origine par des arêtes allant de la copie de à la copie de , pour tous les choix de . De plus, si appartient à l'ensemble de sommets spécifié mais pas autrement, incluez également une arête qui va de la copie de à la copie de .n u v i u i + 1 vnnuviui+1vu i u 0 viuiu0v

Les cycles du graphique développé se projettent tous vers le bas jusqu'aux cycles du graphique d'origine, mais chaque cycle du graphique développé contient l'un des sommets spécifiés (sinon vous ne pouvez pas reculer dans les couches d'expansion), donc le graphique d'origine contient un cycle négatif contenant un sommet spécifié si le graphique développé ne contient aucun cycle négatif.


Si le graphique d'origine a sommets et arêtes, le graphique nouvellement construit aura sommets et arêtes. Pour y trouver des cycles négatifs, il faudra du temps , ce qui semble assez important. J'attends toujours une meilleure solution, et merci beaucoup! m n 2 n m O ( n 3 m )nmn2nmO(n3m)
Tianyi Cui

2
Peut-être plus problématique, les cycles qu'il trouve ne seront pas nécessairement simples. Avez-vous besoin de cycles négatifs simples?
David Eppstein
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.