Ich habe eine große Anzahl linearer Netzwerke und möchte die beiden Enden jedes Netzwerks finden, die entlang des Netzwerks am weitesten voneinander entfernt sind (in der Abbildung unten wären es D bis K). Die Brute-Force-Lösung für dieses Problem besteht darin, den kürzesten Pfad entlang des Netzwerks für jedes Ursprungspaar zu berechnen. Ich habe jedoch Hunderte von Netzwerken mit Tausenden von Enden. Daher ist die Berechnung jedes möglichen Pfads recht schwierig.
Gibt es eine optimale Methode, um dies zu berechnen, ohne die Brute Force einzusetzen? Kann ich einige Punkte aufgrund einiger cleverer Regeln ausschließen?
EDIT: Ich habe eine Illustration des längsten von @Alex Tereshenkov erwähnten Pfades hinzugefügt, um meine Frage zu klären. Der schwarze Pfad ist das Ergebnis des Algorithmus für den längsten Pfad (längster Pfad ohne Wiederholung von Scheitelpunkten). Stellen Sie sich in meinem Fall vor, Sie betreten das Netzwerk von einem beliebigen Buchstaben aus und müssen so schnell wie möglich zu einem anderen Buchstaben fahren. Welche beiden Buchstaben sind am schwierigsten zu verbinden?
Antworten:
Ich denke, Sie suchen möglicherweise nach dem Diagrammdurchmesser Ihres Netzwerks. Es gibt einige Fragen zum Stack-Austausch, die dieses Thema betreffen, z.
Die meisten Algorithmen schlagen vor, zuerst die "kürzesten Wege aller Paare" zu berechnen und den längsten davon auszuwählen, aber ich fand einen Blog-Beitrag von Koushik Narayanan , der einen alternativen Ansatz vorschlägt, der optimaler sein könnte (ich habe nicht geprüft), welcher iteriert über jeden Scheitelpunkt und findet das am weitesten entfernte Paar:
quelle
Laut Wikipedia-Seite Längster Pfad Problem , dieses Problem
Wenn Sie mit DAG arbeiten (oder Ihr Diagramm als DAG darstellen können ), können
networkx
Sie es mit dem Python-Paket berechnen. Suchen Sie nach der Funktiondag_longest_path
.Wenn mir nichts fehlt, müssen Sie die Länge zwischen den Diagrammknoten berechnen und sortieren, was leider nur in linearer Zeit funktioniert , dh es gibt keinen effizienten Algorithmus dafür.
quelle