Алгоритм Дейкстры

Сущность и формальное определение алгоритма на графах, изобретенного нидерландским ученым Э. Дейкстрой. Принципы использования массивов чисел в простейшей реализации для хранения чисел. Анализ сложности алгоритма и доказательство его корректности.

Рубрика Математика
Вид реферат
Язык русский
Дата добавления 07.05.2011
Размер файла 249,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

11

АЛГОРИТМ ДЕКСТРЫ

Алгоримтм Демйкстры (Dijkstra's algorithm) -- алгоритм на графах, изобретённый нидерландским ученым Э. Дейкстрой в 1959 году. Находит кратчайшее расстояние от одной из вершин графа до всех остальных. Алгоритм работает только для графов без рёбер отрицательного веса. Алгоритм широко применяется в программировании и технологиях, например, его использует протокол OSPF для устранения кольцевых маршрутов.

Формальное определение:

Дан взвешенный ориентированный[1] граф G(V,E) без петель и дуг отрицательного веса. Найти кратчайшие пути от некоторой вершины a графа G до всех остальных вершин этого графа.

Неформальное объяснение

Каждой вершине из V сопоставим метку -- минимальное известное расстояние от этой вершины до a. Алгоритм работает пошагово -- на каждом шаге он «посещает» одну вершину и пытается уменьшать метки. Работа алгоритма завершается, когда все вершины посещены.

Инициализация. Метка самой вершины a полагается равной 0, метки остальных вершин -- бесконечности. Это отражает то, что расстояния от a до других вершин пока неизвестны. Все вершины графа помечаются как непосещённые.

Шаг алгоритма. Если все вершины посещены, алгоритм завершается. В противном случае, из ещё не посещённых вершин выбирается вершина u, имеющая минимальную метку. Мы рассматриваем всевозможные маршруты, в которых uявляется предпоследним пунктом. Вершины, в которые ведут рёбра из u, назовемсоседями этой вершины. Для каждого соседа вершины u, кроме отмеченных как посещённые, рассмотрим новую длину пути, равную сумме значений текущей метки u и длины ребра, соединяющего u с этим соседом. Если полученное значение длины меньше значения метки соседа, заменим значение метки полученным значением длины. Рассмотрев всех соседей, пометим вершину u как посещенную и повторим шаг алгоритма.

Пример

Рассмотрим выполнение алгоритма на примере графа, показанного на рисунке. Пусть требуется найти расстояния от 1-й вершины до всех остальных.

Кружками обозначены вершины, линиями -- пути между ними (ребра графа). В кружках обозначены номера вершин, над ребрами обозначена их «цена» -- длина пути. Рядом с каждой вершиной красным обозначена метка -- длина кратчайшего пути в эту вершину из вершины 1.

Первый шаг. Рассмотрим шаг алгоритма Дейкстры для нашего примера. Минимальную метку имеет вершина 1. Её соседями являются вершины 2, 3 и 6.

Первый по очереди сосед вершины 1 -- вершина 2, потому что длина пути до неё минимальна. Длина пути в неё через вершину 1 равна сумме кратчайшего расстояния до вершины 1, значению её метки, и длины ребра, идущего из 1-ой в 2-ую, то есть 0 + 7 = 7. Это меньше текущей метки вершины 2, бесконечности, поэтому новая метка 2-й вершины равна 7.

Аналогичную операцию проделываем с двумя другими соседями 1-й вершины -- 3-й и 6-й.

Все соседи вершины 1 проверены. Текущее минимальное расстояние до вершины 1 считается окончательным и пересмотру не подлежит (то, что это действительно так, впервые доказал Э. Дейкстра). Вычеркнем её из графа, чтобы отметить, что эта вершина посещена.

Второй шаг. Шаг алгоритма повторяется. Снова находим «ближайшую» из непосещенных вершин. Это вершина 2 с меткой 7.

Снова пытаемся уменьшить метки соседей выбранной вершины, пытаясь пройти в них через 2-ю вершину. Соседями вершины 2 являются вершины 1, 3 и 4.

Первый (по порядку) сосед вершины 2 -- вершина 1. Но она уже посещена, поэтому с 1-й вершиной ничего не делаем.

Следующий сосед вершины 2 -- вершина 3, так как имеет минимальную метку из вершин, отмеченных как не посещённые. Если идти в неё через 2, то длина такого пути будет равна 17 (7 + 10 = 17). Но текущая метка третьей вершины равна 9<17, поэтому метка не меняется.

Ещё один сосед вершины 2 -- вершина 4. Если идти в неё через 2-ю, то длина такого пути будет равна сумме кратчайшего расстояния до 2-ой вершины и расстояния между вершинами 2 и 4, то есть 22 (7 + 15 = 22). Поскольку 22<, устанавливаем метку вершины 4 равной 22.

Все соседи вершины 2 просмотрены, замораживаем расстояние до неё и помечаем её как посещенную.

Третий шаг. Повторяем шаг алгоритма, выбрав вершину 3. После её «обработки» получим такие результаты:

алгоритм дейкстрой графа доказательство

Дальнейшие шаги. Повторяем шаг алгоритма для оставшихся вершин. Это будут вершины 6, 4 и 5, соответственно порядку.

Завершение выполнения алгоритма. Алгоритм заканчивает работу, когда вычеркнуты все вершины. Результат его работы виден на последнем рисунке: кратчайший путь от вершины 1 до 2-й составляет 7, до 3-й -- 9, до 4-й -- 20, до 5-й -- 20, до 6-й -- 11.

Алгоритм

Обозначения

§ V -- множество вершин графа

§ E -- множество ребер графа

§ w[ij] -- вес (длина) ребра ij

§ a -- вершина, расстояния от которой ищутся

§ U -- множество посещенных вершин

§ d[u] -- по окончании работы алгоритма равно длине кратчайшего пути из a до вершины u

§ p[u] -- по окончании работы алгоритма содержит кратчайший путь из a в u

Псевдокод

Присвоим

Для всех отличных от a

присвоим

Пока

Пусть -- вершина с минимальным d[v]

Для всех таких, что

если d[u] > d[v] + w[vu] то

изменим

изменим

Описание

В простейшей реализации для хранения чисел d[i] можно использовать массив чисел, а для хранения принадлежности элемента множеству U -- массив булевых переменных.

В начале алгоритма расстояние для начальной вершины полагается равным нулю, а все остальные расстояния заполняются большим положительным числом (бомльшим максимального возможного пути в графе). Массив флагов заполняется нулями. Затем запускается основной цикл.

На каждом шаге цикла мы ищем вершину с минимальным расстоянием и флагом равным нулю. Затем мы устанавливаем в ней флаг в 1 и проверяем все соседние с ней вершины. Если в ней расстояние больше, чем сумма расстояния до текущей вершины и длины ребра, то уменьшаем его. Цикл завершается когда флаги всех вершин становятся равны 1, либо когда у всех вершин c флагом 0 . Последний случай возможен тогда и только тогда, когда граф G не связан.

Доказательство корректности

Пусть l(v) -- длина кратчайшего пути из вершины a в вершину v. Докажем по индукции, что в момент посещения любой вершины z, d(z)=l(z).
База. Первой посещается вершина a. В этот момент d(a)=l(a)=0.
Шаг. Пускай мы выбрали для посещения вершину . Докажем, что в этот момент d(z)=l(z). Для начала отметим, что для любой вершины v, всегда выполняется (алгоритм не может найти путь короче, чем кратчайший из всех существующих). Пусть P -- кратчайший путь из a в z, y -- первая непосещённая вершина на P, x -- предшествующая ей (следовательно, посещённая). Поскольку путь P кратчайший, его часть, ведущая из a через x в y, тоже кратчайшая, следовательно l(y)=l(x)+w(xy). По предположению индукции, в момент посещения вершины x выполнялось d(x)=l(x), следовательно, вершина y тогда получила метку не больше чем d(x)+w(xy)=l(x)+w(xy)=l(y) (если существует k, такое что l(k) + w(ky) < l(x) + w(xy) то x не принадлежит P). Следовательно, d(y)=l(y). С другой стороны, поскольку сейчас мы выбрали вершину z, её метка минимальна среди непосещённых, то есть . Комбинируя это с , имеем d(z)=l(z), что и требовалось доказать.

Поскольку алгоритм заканчивает работу, когда все вершины посещены, в этот момент d=l для всех вершин.

Сложность алгоритма

Сложность алгоритма Дейкстры зависит от способа нахождения вершины v, а также способа хранения множества непосещенных вершин и способа обновления меток. Обозначим через n количество вершин, а через m -- количество ребер в графе G.

§ В простейшем случае, когда для поиска вершины с минимальным d[v] просматривается все множество вершин, а для хранения величин d -- массив, время работы алгоритма есть O(n2 + m). Основной цикл выполняется порядка n раз, в каждом из них на нахождение минимума тратится порядка n операций, плюс количество релаксаций (смен меток), которое не превосходит количества ребер в исходном графе.

§ Для разреженных графов (то есть таких, для которых m много меньше n?) непосещенные вершины можно хранить в двоичной куче, а в качестве ключа использовать значения d[i], тогда время извлечения вершины из станет logn, при том, что время модификации d[i] возрастет до logn. Так как цикл выполняется порядка n раз, а количество релаксаций не больше m, скорость работы такой реализации O(nlogn + mlogn)

§ Если для хранения непосещенных вершин использовать фибоначчиеву кучу, для которой удаление происходит в среднем заO(logn), а уменьшение значения в среднем за O(1), то время работы алгоритма составит O(nlogn + m).

Размещено на Allbest.ru


Подобные документы

  • Расширенный алгоритм Евклида, его использование для нахождения наибольшего общего делителя натуральных чисел посредством остатков от деления. Математическая проблема календаря. Евклидовы кольца - аналоги чисел Фибоначчи в кольце многочленов, их свойства.

    реферат [571,1 K], добавлен 25.09.2009

  • Применение способа решета Эратосфена для поиска из заданного ряда простых чисел до некоторого целого значения. Рассмотрение проблемы простых чисел-близнецов. Доказательство бесконечности простых чисел-близнецов в исходном многочлене первой степени.

    контрольная работа [66,0 K], добавлен 05.10.2010

  • Проблема универсального генератора простых чисел. Попытки создания формул для нахождения простых чисел. Сущность теоремы сравнений. Доказательство "Малой теоремы Ферма". "Золотая теорема" о квадратичном законе взаимности. Генераторы простых чисел Эйлера.

    реферат [22,8 K], добавлен 22.03.2016

  • Свойства чисел натурального ряда. Периодическая зависимость от порядковых номеров чисел. Шестеричная периодизация чисел. Область отрицательных чисел. Расположение простых чисел в соответствии с шестеричной периодизацией.

    научная работа [20,2 K], добавлен 29.12.2006

  • Теория графов как математический аппарат для решения задач. Характеристика теории графов. Критерий существования обхода всех ребер графа без повторений, полученный Л. Эйлером при решении задачи о Кенигсбергских мостах. Алгоритм на графах Дейкстры.

    контрольная работа [466,3 K], добавлен 11.03.2011

  • Сумма n первых чисел натурального ряда. Вычисление площади параболического сегмента. Доказательство формулы Штерна. Выражение суммы k-х степеней натуральных чисел через детерминант и с помощью бернуллиевых чисел. Сумма степеней и нечетных чисел.

    курсовая работа [8,2 M], добавлен 14.09.2015

  • Способы решения задач дискретной математики. Расчет кратчайшего пути между парами всех вершин в ориентированном и неориентированном графах с помощью использования алгоритма Флойда. Анализ задачи и методов ее решения. Разработка и характеристика программы.

    курсовая работа [951,4 K], добавлен 22.01.2014

  • Закон сохранения количества чисел Джойнт ряда в натуральном ряду чисел как принцип обратной связи чисел в математике. Структура натурального ряда чисел. Изоморфные свойства рядов четных и нечетных чисел. Фрактальная природа распределения простых чисел.

    монография [575,3 K], добавлен 28.03.2012

  • Сведения о семье Якоба Бернулли, его тайное увлечение математикой в юности и последующий вклад в развитие теории вероятности. Составление ученым таблицы фигурных чисел и выведение формул для сумм степеней натуральных чисел. Расчет значений чисел Бернулли.

    презентация [422,7 K], добавлен 02.06.2013

  • Исторические факты исследования простых чисел в древности, настоящее состояние проблемы. Распределение простых чисел в натуральном ряде чисел, характер и причина их поведения. Анализ распределения простых чисел-близнецов на основе закона обратной связи.

    статья [406,8 K], добавлен 28.03.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.