Liebe Programmierkollegen,
Wir entwickeln eine Software, die den Fahrzeugverkehr simuliert. Ein Teil des als "Zuweisung" bezeichneten Prozesses befasst sich mit der Zuweisung von Fahrzeugen zu ihren Routen und muss eine Art Algorithmus zum Auffinden kürzester Wege verwenden.
Traditionell tun dies Menschen mit Dijkstra, und bestimmte wissenschaftliche Literatur scheint darauf hinzudeuten, dass A * und andere Alternativen keine signifikante Verbesserung ergeben, möglicherweise aufgrund der Art des Diagramms.
Daher verwenden wir auch Dijkstra. Ein kleines Problem bestand darin, dass Sie, wenn Sie Verkehrsverbindungen (Straßenspannen zwischen Kreuzungen) als Kanten und Kreuzungen als Knoten behandeln, kein klassisches unidirektionales Diagramm erhalten können: Wenn Sie sich einer Kreuzung nähern, von der Sie häufig abbiegen können, hängt dies davon ab woher Sie kommen, während Sie in einem herkömmlichen Diagramm eine beliebige Kante von einem Knoten nehmen können.
Wir haben dieses Problem ganz einfach gelöst, indem wir ein Verbindungs-Schnittpunkt-Paar (nennen wir es "Latte") als Knoten dargestellt haben. Da Sie einen Link durchlaufen müssen, um zu einer nachfolgenden "Leiste" oder einem Punkt Ihrer Wahl zu gelangen, wird eine Kante als diese Durchquerung definiert, und Sie erhalten ein typisches Diagramm.
Die Ergebnisse werden dann in einer einfachen Tabelle N x N gespeichert, wobei N die Anzahl der "Latten" ist.
Hier ist der (unvermeidliche?) Nachteil. Wenn ein typisches Netzwerk für unsere Simulation beispielsweise 2000 Kreuzungen haben kann, hat es ungefähr 6000 Verbindungen, dh N = 3V. Wenn wir in Bezug auf die Schnittpunkte (V) gezählt werden, sind wir jetzt bis zu O (log (3V) * (3V + E)).
Sie könnten argumentieren, dass 3 (oder 9) ein konstanter Faktor ist, aber vom praktischen Standpunkt aus verlangsamt er die Dinge erheblich und erhöht den Speicherplatz auf 3 V x 3 V.
Hat jemand eine Idee, wie wir dies umstrukturieren können, um die Leistung zu verbessern? Nicht unbedingt ein alternativer Algorithmus, vielleicht die Datenstrukturen neu formen, um sie auf andere Weise an einen Graphen anzupassen?