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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Понравилась статья? Поделиться с друзьями:
Математика не для всех
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: