Как провайдеры карт (такие как Google или Yahoo! Maps) предлагают маршруты?
Я имею в виду, что они, вероятно, имеют реальные данные в некоторой форме, конечно, включая расстояния, но также, возможно, такие вещи, как скорость движения, наличие тротуаров, расписание поездов и т. Д. Но предположим, что данные были в более простом формате, скажем, очень большой ориентированный граф с весом ребер, отражающих расстояния. Я хочу иметь возможность быстро вычислять направления от одной произвольной точки к другой. Иногда эти точки будут близко друг к другу (в пределах одного города), а иногда они будут далеко друг от друга (кросс-кантри).
Алгоритмы графа, такие как алгоритм Дейкстры, не будут работать, потому что граф огромен. К счастью, эвристические алгоритмы типа A *, вероятно, будут работать. Тем не менее, наши данные очень структурированы, и, возможно, какой-то многоуровневый подход может сработать? (Например, сохраните предварительно вычисленные направления между определенными «ключевыми» точками далеко друг от друга, а также некоторые локальные направления. Тогда направления для двух удаленных точек будут включать локальные направления для ключевых точек, глобальные направления к другой ключевой точке, а затем локальные направления снова.)
Какие алгоритмы на самом деле используются на практике?
PS. Этот вопрос был мотивирован нахождением причуд в направлениях картографирования онлайн. Вопреки неравенству треугольника, иногда Google Maps считает, что XZ занимает больше времени и дальше, чем использование промежуточной точки, как в XYZ . Но, может быть, их маршруты для прогулок тоже оптимизированы для другого параметра?
PPS. Вот еще одно нарушение неравенства треугольника, которое предполагает (для меня), что они используют какой-то многоуровневый подход: XZ против XYZ . Бывший, кажется, использует выдающийся Севастопольский бульвар, хотя это немного в стороне.
Изменить : ни один из этих примеров, кажется, больше не работает, но оба работали во время первоначальной публикации.