Wie schwer ist es, die Anzahl einfacher Pfade zwischen zwei Knoten in einem gerichteten Graphen zu zählen?


29

Mit einem einfachen Polynomalgorithmus kann entschieden werden, ob in einem gerichteten Graphen ein Pfad zwischen zwei Knoten vorhanden ist.

Es scheint jedoch überraschenderweise, dass das Problem viel schwieriger wird, wenn wir anstatt auf die Existenz zu testen, die Anzahl der Pfade zählen möchten .

Wenn wir zulassen, dass Pfade Eckpunkte wiederverwenden, gibt es eine dynamische Programmierlösung, um die Anzahl der Pfade von s nach t mit n Kanten zu ermitteln. Wenn wir jedoch nur einfache Pfade zulassen, die keine Eckpunkte wiederverwenden, kann ich mir nur eine Brute-Force-Aufzählung der Pfade vorstellen, die eine exponentielle zeitliche Komplexität aufweist.

Deshalb frage ich,

  • Ist es schwierig, die Anzahl der einfachen Pfade zwischen zwei Scheitelpunkten zu zählen?
  • Wenn ja, ist es irgendwie NP-vollständig? (Ich sage irgendwie, weil es technisch kein Entscheidungsproblem ist ...)
  • Gibt es andere Probleme in P, die auch solche Versionen mit harter Zählung haben? **

Übrigens, ich kenne die Antwort auf diese Frage jetzt tatsächlich, aber ich bin gespannt, welche Art von Antwort ich bekommen würde, wenn ich sie zurückfragen würde, als ich sie zum ersten Mal erfand.
Hugomg


@ Suresh: Ich weiß, wie man die Brute-Force-Suche codiert. Meine Frage, ob es einen effizienteren Algorithmus gibt. In jedem Fall wäre diese SO-Frage ähnlicher und enthält sogar eine Antwort von mir, wenn Sie an Spoilern interessiert sind.
Hugomg

Antworten:


18

Die häufigste mit dem Zählen von Problemen verbundene Komplexitätsklasse ist #P . Die Entscheidung, ob es einen einfachen Pfad von einem bestimmten Knoten zu einem anderen gibt, liegt eindeutig in NP. Sie zu zählen ist dann in #P.

n!

Die Antwort auf Ihre zwei ersten beiden Fragen lautet: Ja, es ist schwer, es ist # P-vollständig (ref) .

Der Wikipedia- Artikel gibt relevante Fakten: 1) Wahrscheinlichkeits-Algorithmen sind nützlich, um # P-vollständige Funktionen zu approximieren, und das ist die Art von Algorithmus, die für die Approximation im vorherigen Artikel verwendet wurde. 2) Es gibt andere leichte Probleme mit Versionen, die hart (# P-vollständig) zählen:

  • Finden (linear) vs. Zählen aller Zuordnungen, die eine DNF-Formel oder eine Instanz von 2-SAT erfüllen
  • Finden (linear) vs. Zählen topologischer Sortierungen
  • Finden von (O (VE)) vs. Zählen der perfekten Übereinstimmung in zweigeteilten Diagrammen

Sie wissen bereits, dass, wenn Sie die Einschränkung "einfacher Pfad" entfernen, das Problem in P fällt (nun müssen Sie die Länge der Pfade durch ein Polynom der Größe des Graphen begrenzen oder die Grenze in Unary angeben).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.