Heim >Backend-Entwicklung >C++ >Der optimierte längste Pfad ist NP-vollständig

Der optimierte längste Pfad ist NP-vollständig

王林
王林nach vorne
2023-09-06 09:01:071076Durchsuche

Der optimierte längste Pfad ist NP-vollständig

Das Problem „Upgrade Longest Path“ ist eine rechentechnisch schwierige Aufgabe, die NP-vollständig sein muss. In dieser Ausgabe besteht das Ziel bei einem Diagramm mit gewichteten Kanten darin, den längsten Weg von einem vorgegebenen Start-Hub zu einem End-Hub zu finden und gleichzeitig die Kantenbelastung zu vergrößern. Aufgrund der erheblichen Entwicklung möglicher Forschungsmethoden kann keine bekannte Polynomzeitberechnung dieses Problem in allen Fällen effizient lösen. Alles in allem verlassen sich Wissenschaftler auf spekulative Berechnungen und Heuristiken, um die nächstgelegene ideale Anordnung aufzuspüren. Die Probleme mit diesem Problem hatten Auswirkungen auf verschiedene Bereiche wie Transport, Planungsvorgänge und Buchungsreservierungen.

Anwendungsmethode

  • Vereinfachtes Hamilton-Pfadproblem

  • Verwenden Sie bekannte NP-vollständige Probleme

Vereinfachung des Hamilton-Pfadproblems

Eine Möglichkeit, das NP-vollständige Problem „Upgrade des längsten Pfads“ zu lösen, besteht darin, eine Reduzierung im Vergleich zum berühmten NP-vollständigen Problem (das so genannte Hamilton-Straßenproblem) zu zeigen. Das Hamilton-Straßenproblem bestimmt, ob ein gegebener Graph einen Pfad enthält, der jeden Knoten genau einmal besucht.

Algorithmus

  • Nehmen Sie als Beispiel das Hamilton-Straßenproblem, bei dem es sich um einen Graphen G handelt.

  • Erstellen Sie einen weiteren Graphen G', der von G nicht zu unterscheiden ist, mit ähnlichen Eckpunkten und Kanten.

  • Weisen Sie allen Kanten in G‘ das Gewicht 1 zu.

  • Setzen Sie die Start- und Enddrehpunkte des Problems „Erweiterter längster Weg“ auf zwei beliebige instabile Drehpunkte in G‘.

  • Wenn G einen Hamilton-Pfad hat, ist der „aktualisierte längste Pfad“ in G‘ ein ähnlicher Hamilton-Pfad mit einer Kantenlast, die der Anzahl der Kanten entspricht, die der Anzahl der um einen Punkt kürzeren Eckpunkte entspricht.

  • Wenn G keine Hamilton-Straße hat, dann ist der „stromlinienförmige längste Pfad“ in G‘ zu diesem Zeitpunkt ein direkter Pfad vom Start-Hub zum End-Hub, wobei der Betrag der Kantenbelastung gleich der Anzahl ist Kanten, die nicht vollständig sind, ist die Anzahl der kurzen Eckpunkte.

  • Dieser Rückgang zeigt, dass die Lösung des „verbesserten längsten Pfades“ genauso schwierig ist wie die Lösung des Hamilton-Straßenproblems, was es zu einem NP-vollständigen Problem macht.

Beispiel

#include <iostream>
#include <vector>
#include <functional>

using namespace std;

bool hasHamiltonianPath(const vector<vector<int>>& graph, int 
start, int finish) {
   int n = graph.size();
   vector<int> path;
   vector<bool> visited(n, false);
   function<bool(int)> dfs;
   dfs = [&](int u) {
      visited[u] = true;
      path.push_back(u);
      if (u == finish && path.size() == n)
         return true;
      for (int v = 0; v < n; ++v) {
         if (!visited[v] && graph[u][v]) {
            if (dfs(v))
               return true;
         }
      }
      visited[u] = false;
      path.pop_back();
      return false;
   };
   return dfs(start);
}

int main() {
   int n = 5;
   vector<vector<int>> graph(n, vector<int>(n, 0));
   graph[0][1] = graph[1][0] = 1;
   graph[1][2] = graph[2][1] = 1;
   graph[2][3] = graph[3][2] = 1;
   graph[3][4] = graph[4][3] = 1;
   vector<vector<int>> graph_prime = graph;
   int start = 0, finish = 3;
   if (hasHamiltonianPath(graph, start, finish))
      cout << "G has a Hamiltonian Path.\n";
   else
      cout << "G does not have a Hamiltonian Path.\n";
   return 0;
}

Ausgabe

G does not have a Hamiltonian Path.

Verwenden Sie bekannte NP-vollständige Probleme

Ein anderer Ansatz besteht darin, zu beweisen, dass der „reduzierte längste Pfad“ NP-vollständig ist, indem man ihn aus einem bekannten NP-vollständigen Problem wie dem Problem des längsten Pfads oder dem Problem des beweglichen Vertriebsmitarbeiters (direkt TSP) reduziert.

Algorithmus

  • Gegeben sei das Problem des längsten Pfades, bei dem es sich um einen Graphen G und eine ganze Zahl k handelt, die nach der idealen Pfadlänge auflöst.

  • Erstellen Sie einen weiteren Graphen G', der sich nicht von G unterscheidet, mit ähnlichen Eckpunkten und Kanten.

  • Weisen Sie allen Kanten in G‘ das Gewicht 1 zu.

  • Setzen Sie die Start- und Enddrehpunkte des Problems „Erweiterter längster Weg“ auf zwei beliebige instabile Drehpunkte in G‘.

  • Wenn G einen längsten Pfad der Länge k hat, dann ist der „verbesserte längste Pfad“ in G‘ ein ähnlich längster Pfad mit einer Kantenbelastung von k.

  • Wenn G nicht den längsten Weg der Länge k hat, gibt es zu diesem Zeitpunkt keinen Weg in G' mit einer Kantenlast gleich k.

  • Da das Problem des längsten Pfads bekanntermaßen NP-vollständig ist, stellt diese Reduktion den NP-Gipfel des „vereinfachten längsten Pfads“ dar.

  • Beide Methoden zeigen, dass der „längste Pfad auf hoher Ebene“ NP-vollständig ist und es daher keine bekannte effiziente Berechnung gibt, die ihn in allen Fällen bewältigen kann, was seine rechnerische Komplexität zeigt.

Beispiel

#include <iostream>
#include <vector>

class Graph {
public:
   int V; // Number of vertices
   std::vector<std::vector<int>> adj;

   Graph(int V) : V(V) {
      adj.resize(V, std::vector<int>(V, 0));
   }

   void addEdge(int u, int v) {
      adj[u][v] = 1;
      adj[v][u] = 1;
   }

   bool hasEnhancedLongestWay(int k, int start, int end) {
      return false;
   }
};

int main() {
   int V = 5; // Number of vertices
   Graph G(V);
   G.addEdge(0, 1);
   G.addEdge(1, 2);
   G.addEdge(2, 3);
   G.addEdge(3, 4);

   int k = 3;
   int start = 0;
   int end = 4;
   bool hasEnhancedLongestWay = G.hasEnhancedLongestWay(k, start, end);
   std::cout << std::boolalpha << hasEnhancedLongestWay << 
std::endl;

   return 0;
}

Ausgabe

false

Fazit

Der Übergang zum ersten Ansatz beinhaltet die Reduzierung des berühmten Problems der Hamilton-Methode. Indem wir den Fall des Hamilton-Straßenproblems in den Fall der „Advanced Longest Road“ umwandeln, zeigen wir, dass die Lösung des letzten Problems irgendwie genauso schwierig ist wie die Lösung des vorherigen Problems und erläutern seine NP-Implementierung.

Methode 2 erklärt direkt, wie das Problem von einem anderen bekannten NP-vollständigen Problem, dem Longest-Path-Problem oder dem Moving Sales Representative Problem (TSP), reduziert werden kann. Indem wir zeigen, wie der „verbesserte längste Pfad“ in diese NP-vollständigen Probleme umgewandelt werden kann, zeigen wir, dass er eine ähnliche Rechenkomplexität aufweist und auf diese Weise NP-vollständig ist.

Das obige ist der detaillierte Inhalt vonDer optimierte längste Pfad ist NP-vollständig. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen