Поиск кратчайших путей в дорожных сетях: от теории к...
Transcript of Поиск кратчайших путей в дорожных сетях: от теории к...
Алгоритм ДейкстрыВиталий Осипов
Слайды основаны на лекциях, читавшихся в летнем семестре на факультете информатики KIT.http://i11www.iti.uni-karlsruhe.de/teaching/sommer2015/routenplanung/index
Постановка задачи
› Дано– Граф c весовой функцией
› Задача– Вычислить – Вычислить кратчайший --Путь
Постановка задачиСвойства
› Ацикличность– Кратчайшие пути не содержат
циклов› Остовность
– Объединение всех кратчайших путей из s является DAG, а именно деревом
› Наследственность – Все подпути кратчайшего пути
являются кратчайшими путями› Расстояние
– Расстояние возрастает от корня к листьям
› Сложность зависит от входного графа– Веса неотрицательны– Циклы с отрицательным общим весом– Простой путь – путь без повторяющихся вершин
› Варианты задачи– Веса неотрицательны: Алгоритм Дейкстры ( )– Веса могут быть отрицательными, но нет
отрицательных циклов: Алгоритм Беллмана-Форда ( )– Веса могут быть отрицательными, поиск кратчайшего
простого пути: NP сложна (сведение от задачи нахождения самого длинного пути)
Расчет кратчайшего пути
Расчет кратчайшего пути
› Задача нахождения самого длинного пути› Дано
– Направленный, взвешенный граф с весовой функцией – Число – Вершины
› Найти– Существует ли простой --путь длинны
› Задача NP сложна (Гэри Джонсон 79)
Расчет кратчайшего путиАлгоритм Дейкстры
Расчет кратчайшего путиАлгоритм Дейкстры
› Дано Граф , начальная вершина › Идея: Поиск в по мере увеличение расстояния
от
Расчет кратчайшего путиРелаксация ребер
› Релаксация ребер
› Посещенные вершины (visited) – те, которые были добавлены в очередь
› Обработанные вершины – те, которые были добавлены в очередь и вновь удалены из нее
Расчет кратчайшего путиРелаксация ребер
Алгоритм ДейкстрыВремя выполнения
Алгоритм ДейкстрыВремя выполнения
𝑇 𝑑𝑖𝑗𝑘𝑠𝑡𝑟𝑎=𝑇 𝑖𝑛𝑖𝑡+𝑛 ∙𝑇 𝑑𝑒𝑙𝑒𝑡𝑒𝑀𝑖𝑛+𝑚 ∙𝑇𝑑𝑒𝑐𝑟𝑒𝑎𝑠𝑒𝐾𝑒𝑦 +𝑛 ∙𝑇 𝑖𝑛𝑠𝑒𝑟𝑡
Алгоритм ДейкстрыВремя выполнения
› k-арная куча: Дерево со степенью ветвистости (макс) k
› Граф: 18М вершин, 42М ребер– Дейкстра ~ 1.5 s– CPU циклов ~ 30 ms– BFS 1.2 s дело не в куче
› Доступ к памяти является узким местом
k Запрос [s]
2 1.834
3 1.595
4 1.507
5 1.525
8 1.561
Оптимизация Алгоритма ДейкстрыОбласть поиска
Оптимизация Алгоритма ДейкстрыРанний выход
› Наблюдение– Алгоритм Дейкстры просматривает весь граф– , Много ненужной информации особенно когда и рядом друг с другом
› Идея– Остановить поиск как только удалена из очереди– Область поиска сужается до обработанных вершин к
моменту удаления › Корректность
– d[v] не меняется с момента удаления из очереди
Оптимизация Алгоритма ДейкстрыРанний выход
Оптимизация Алгоритма ДейкстрыРанний выход
Оптимизация Алгоритма ДейкстрыМетки времени
› , Что может быть узким местом если запросы на ?одном и том же графе
Оптимизация Алгоритма ДейкстрыМетки времени
Оптимизация Алгоритма ДейкстрыМетки времени
Оптимизация Алгоритма ДейкстрыМетки времени
› Задача– Много запросов на одном и том же графе– Инициализация при каждом запросе
› Идея– Для каждой вершины хранить метку времени run[v]– Использовать счетчик запросов– С помощью счетчика можно определить посещалась
ли вершина в ходе обработки текущего запроса
Оптимизация Алгоритма ДейкстрыМетки времени
Дейкстра: двунаправленный поиск
› : Наблюдение Кратчайший путь можно найти:используя– ( ) Обычный алгоритм Дейкстры прямой поиск из– Алгоритм Дейкстры на графе, полученном
изменением направления всех ребер на противоположное из t(обратный поиск)
› : :Идея Скомбинируем оба поиска– « » Чередующийся прямой и обратный поиск– Закончить поиск как только оба поиска «достаточно
далеко продвинулись»– Объединить пути найденные обоими поисками
Дейкстра: двунаправленный поиск
Дейкстра: двунаправленный поиск
› Запрос– Чередуем итерации прямого и обратного поиска– : Прямой релаксируем исходящие ребра– : Обратный релаксируем входящие ребра
Дейкстра: двунаправленный поиск
› Проблема– Нужна информация об исходящих и входящих ребрах– Граф (почти) ненаправленный
› Входной граф и вершины .› Для пусть развернутый граф, где
› Прямым поиском называется Дейкстра из на – Очередь , вектор расстояний
› Обратным поиском называется Дейкстра из на – Очередь , вектор расстояний
Дейкстра: двунаправленный поискОпределения
Дейкстра: двунаправленный поискАлгоритм
› / Чередование итерация прямого обратногопоиска
› Вычисляем текущее расстояние и текущую промежуточную вершину
› При релаксации ребра обновляем min{} и промежуточную вершину
› По окончании поиска содержит и – кратчайший путь
› Когда можно прервать поиск?
Дейкстра: двунаправленный поискСтратегия окончания поиска (1)
› (1)Стратегия– Закончить поиск как только существует вершина m, которая в обоих поисках является обработанной
› Лежит ли на кратчайшем пути?
Дейкстра: двунаправленный поискСтратегия окончания поиска (1)
› (1)Стратегия– Закончить поиск как только существует вершина m, которая в обоих поисках является обработанной
› Стратегия (1) вычисляет корректно– Б.о.о. – Ясно, что – Пусть обработанные вершины прямого/обратного
поиска соответственно– Пусть покажем либо
› (1)Стратегия– Закончить поиск как только существует вершина m, которая в обоих поисках является обработанной
› Пусть покажем либо › Пусть тогда
Дейкстра: двунаправленный поискСтратегия окончания поиска (1)
› (1)Стратегия– Закончить поиск как только существует вершина m, которая в обоих поисках является обработанной
› Пусть покажем либо › Пусть тогда
Дейкстра: двунаправленный поискСтратегия окончания поиска (1)
Дейкстра: двунаправленный поискСтратегия окончания поиска (2)
› (2)Стратегия– Закончить поиск как только
› Стратегия (2) вычисляет корректно– Б.о.о. – Ясно, что
› (2)Стратегия– Закончить поиск как только
› Стратегия (2) вычисляет корректно› Пусть по окончанию поиска
– Тогда существует --Путь короче – На существует такое, что и – Т.е. и уже обработанные вершины (б.о.о. до ) – При релаксации путь P был был найден и
актуализирована› Таким образом,
Дейкстра: двунаправленный поискСтратегия окончания поиска (2)
Дейкстра: двунаправленный поискСтратегия чередования итераций
› Возможные стратегии– Принципиально все возможно– Чередование шагов прямого и обратного поиска– Продолжать поиск с меньшим количеством вершин в
очереди– Продолжать поиск с меньшим минимальным элементом в очереди– Параллельное вычисление прямого и обратного 2 поиска на х ядрах
Дейкстра: двунаправленный поискПример области поиска Дейкстра
Дейкстра: двунаправленный поискПример области поиска двунаправленного Дейкстра
Дейкстра: двунаправленный поискЗамечания
› Пусть область поиска является кругом радиуса r› › Параллельное вычисление 4ускорение
ДейкстраРанг
› Проблема– Рандомизированные запросы малоинформативны– ?Дисперсия– ? На каких расстояниях достигается ускорение Длинных или коротких
› Идея– Относительно начальной вершины Дейкстра определяет линейный порядок– Обозначим порядок вершины относительно s– 1000 Выберем начальных вершин и проанализируем время выполнения запроса для нахождения вершин ранга
› Выбросы для близкихзапросов
› Ускорение всегда 2около› Дисперсия выше чем для
Дейкстры› Много быстрых
запросов
Дейкстра: двунаправленный поискРанг