Wie schlagen Kartenanbieter (wie Google oder Yahoo! Maps) Wegbeschreibungen vor?
Ich meine, sie haben wahrscheinlich reale Daten in irgendeiner Form, sicherlich einschließlich Entfernungen, aber vielleicht auch Dinge wie Fahrgeschwindigkeit, Vorhandensein von Gehwegen, Zugfahrplänen usw. Aber nehmen wir an, die Daten hätten ein einfacheres Format, sagen wir einen sehr großen gerichteten Graphen mit Kantengewichten, die Abstände widerspiegeln. Ich möchte in der Lage sein, schnell Richtungen von einem beliebigen Punkt zum anderen zu berechnen. Manchmal liegen diese Punkte nahe beieinander (innerhalb einer Stadt), manchmal sind sie weit voneinander entfernt (Cross-Country).
Graph-Algorithmen wie der Dijkstra-Algorithmus funktionieren nicht, da der Graph enorm ist. Glücklicherweise werden heuristische Algorithmen wie A * wahrscheinlich funktionieren. Unsere Daten sind jedoch sehr strukturiert, und vielleicht könnte ein abgestufter Ansatz funktionieren? (Speichern Sie beispielsweise vorberechnete Richtungen zwischen bestimmten "Schlüssel" -Punkten weit voneinander entfernt sowie einige lokale Richtungen. Dann umfassen Richtungen für zwei weit entfernte Punkte lokale Richtungen zu einem Schlüsselpunkt, globale Richtungen zu einem anderen Schlüsselpunkt und dann lokale wieder Richtungen.)
Welche Algorithmen werden in der Praxis tatsächlich verwendet?
PS. Diese Frage wurde durch das Auffinden von Macken in Online-Mapping-Richtungen motiviert. Im Gegensatz zur Dreiecksungleichung glaubt Google Maps manchmal, dass XZ länger dauert und weiter entfernt ist als die Verwendung eines Zwischenpunkts wie in XYZ . Aber vielleicht optimieren sich ihre Laufrichtungen auch für einen anderen Parameter?
PPS. Hier ist eine weitere Verletzung der Dreiecksungleichung, die (für mich) darauf hindeutet, dass sie einen abgestuften Ansatz verwenden: XZ gegen XYZ . Ersterer scheint den prominenten Boulevard de Sebastopol zu benutzen, obwohl er etwas abgelegen ist.
Bearbeiten : Keines dieser Beispiele scheint mehr zu funktionieren, aber beide haben es zum Zeitpunkt des ursprünglichen Beitrags getan.