59,2K подписчиков

Красивейший математический алгоритм Дейкстры

Планируете автомобильное путешествие или пеший туристический маршрут? Вам снова на помощь придёт математика. Сегодня я расскажу Вам без излишней строгости о замечательном алгоритме поиска кратчайшего пути - алгоритме Дейкстры, который, кстати, еще многие проходили в школе. Поехали!

Эдсгер Дейкстра. Источник: https://upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Edsger_Wybe_Dijkstra.jpg/800px-Edsger_Wybe_Dijkstra.jpg
Эдсгер Дейкстра. Источник: https://upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Edsger_Wybe_Dijkstra.jpg/800px-Edsger_Wybe_Dijkstra.jpg

Итак, алгоритм Дейкстры работает на т.н. взвешенных графах - совокупности вершин, связанных между собой ребрами, каждому из которых присвоен определенный вес. Это вес может быть значением в км расстояния между городами, стоимостью перелетов между аэропортами и т.д.

Например, пусть на рисунке ниже каждой вершине соответствует город, а весам ребер - расстояние между городами в километрах. Наша задача найти кратчайшие маршруты с первого города во все остальные:

Планируете автомобильное путешествие или пеший туристический маршрут? Вам снова на помощь придёт математика.-2

Алгоритм начинается с того, что первому городу присваивается метка "0", а остальным метка "бесконечность". Затем происходит перемещение из первого города во все смежные с ним города:

Планируете автомобильное путешествие или пеший туристический маршрут? Вам снова на помощь придёт математика.-3

Например, из первого города едем во второй: длина маршрута равна "2", что меньше "бесконечности", поэтому присваиваем второму городу метку "2". Аналогично для четвертого и шестого городов - метки "4" и "8".

Планируете автомобильное путешествие или пеший туристический маршрут? Вам снова на помощь придёт математика.-4

Посещенную вершину зачеркиваем, чтобы не путаться. В алгоритме это реализуется присваиванием вершине флага "1". Едем дальше и рассматриваем четвертую вершину:

Планируете автомобильное путешествие или пеший туристический маршрут? Вам снова на помощь придёт математика.-5

Из четвертой вершину можно приехать в шестую. Складываем метку четвертой вершины ("4") и длину маршрута до шестой: 4 + 5 = 9 > 8, следовательно метку шестой вершины не меняем. Из четвертой вершины есть маршрут и седьмую: присваиваем её метку "15". Больше идти некуда - вычеркиваем. Отправляем во вторую вершину:

Планируете автомобильное путешествие или пеший туристический маршрут? Вам снова на помощь придёт математика.-6

Из неё можно приехать в пятую (2 + 10 = 12) и в третью (2+3=5) вершины. Вычеркиваем и отправляемся дальше в третью:

Планируете автомобильное путешествие или пеший туристический маршрут? Вам снова на помощь придёт математика.-7

Из неё дорога в пятую ( 5 + 9 =14 >12 ) и в шестую (5 + 4 = 9 > 8), а значит ни одна из меток не меняется. Вычеркиваем третью и рассматриваем оставшиеся две вершины: пятую и шестую.

Планируете автомобильное путешествие или пеший туристический маршрут? Вам снова на помощь придёт математика.-8

В случае маршрута из пятой в седьмую вершину, метка последней изменяется, т.к. 12 + 2 < 15. В итоге получаем следующий набор маршрутов:

  • 1 - 2 : 2
  • 1 - 3 : 5
  • 1 - 4 : 4
  • 1 - 5: 12
  • 1 - 6: 8
  • 1 - 7: 14

Конечно, приведенный граф достаточно тривиален: для него кратчайшие маршруты можно определить на "глазок". А что, когда дело касается действительно масштабных карт?

******************************************************************************

И ещё, уважаемые Читатели, наверняка, у вас есть дети или внуки, которых не удивишь красивыми алгоритмами, потому что гаджеты давно заменили им традиционные игры и интересы. Для тех, кому знакома эта проблема, советую направить любовь ребенка к играм в полезное русло, заинтересовав, например, программированием.

Планируете автомобильное путешествие или пеший туристический маршрут? Вам снова на помощь придёт математика.-9

В школе цифровых навыков Kodland есть курсы по созданию сайтов, игр, мультфильмов — каждому ребёнку будет интересно. Записать ребёнка на бесплатный урок (!) можно по этой ссылке. Рекомендую!