J'ai un problème et je suppose que c'est NP-difficile, mais je ne peux pas le prouver.
Voici un graphique de calque, où le calque 0 est le calque le plus chaud et le calque L le plus bas.
il y a un bord dirigé entre les couches, où un bord (A, B) indique que le nœud A peut [couvrir] le nœud B. Et quand A peut couvrir B, chaque nœud sur n'importe quel chemin de A à B peut couvrir B, B peut couvrir lui-même.
Enfin, voici un ensemble de nœuds S. J'ai besoin de choisir un autre ensemble de nœuds ANS, et de m'assurer que pour chaque nœud q dans S, il existe un nœud p dans ANS et p couvre q.
Pour chaque nœud, il y a un coût, et je dois minimiser le coût total de l'ensemble ANS.
Est-ce un problème NP-difficile? Je pense que oui mais je ne peux pas le prouver.
Pourriez-vous m'aider?
Merci beaucoup.
Réponses:
Oui, ce problème est définitivement NP difficile. Je poste cette réponse car vous avez besoin d'une preuve.
Si vous suivez ce lien http://en.wikipedia.org/wiki/Set_cover_problem , cela indique que la version d'optimisation du problème de couverture d'ensemble minimal est NP-Hard.
Le problème dans le lien:
Vous pouvez associer cela à votre problème comme suit:
S est l'ensemble des nœuds qui couvrent au moins un nœud de votre ensemble d'entrée. Cela peut être trouvé en effectuant un DFS sur les nœuds de l'ensemble d'entrée avec la direction des bords inversée.
Maintenant, le problème décrit dans le lien est un cas particulier de votre problème, où le coût de chaque nœud est égal et où vous souhaitez simplement minimiser le nombre de nœuds (ensembles).
Par conséquent, votre problème est encore plus difficile à résoudre dans le cas général et c'est donc NP Hard.
la source
S
. Peut-être qu'il y a des coûts négatifs ou quelque chose comme ça ...