Общие теоретические основы
Обход в ширину. Алгоритм Дейкстры.
КУРСОВАЯ РАБОТА студентки 1 курса 131 группы специальности 090301.65 Компьютерная безопасность факультета компьютерных наук и информационных технологий Шакировой Виолетты Александровны
аспирант _____________ Гавриков А. В. Зав. кафедрой
Саратов 2013
СОДЕРЖАНИЕ
Введение 3 1 Теоретическая часть 4 1.1 Общие теоретические основы 4 1.2 Алгоритмы обхода графа 4 1.2.1 Обход в ширину 4 1.2.1.1 Метод обхода 4 1.2.1.2 Алгоритм обхода 5 1.2.1.3 Анализ обхода 6 1.2.1.4 Корректность 6 1.2.2 Поиск кратчайшего пути 7 1.2.2.1 Метод обхода 7 1.2.2.2 Алгоритм обхода 9 1.2.2.3 Анализ обхода 9 1.2.2.4 Корректность 10 2 Практическая часть 13 2.1 Реализация обхода в ширину 12 2.2 Реализация алгоритма Дейкстры 14 Заключение 16 Список использованных источников 17
ВВЕДЕНИЕ
Поиск кратчайшего пути – вопрос, который востребован сегодня повсеместно. Нахождение кратчайшего пути используется практически везде, начиная от поиска оптимального маршрута между двумя объектами на местности, в системах автопилота, нахождение оптимального маршрута при перевозках, коммутации информационного пакета в Internet и т.д. Кратчайший путь рассматривается при помощи некоторого математического объекта, называемого графом. Существует множество алгоритмов поиска кратчайших маршрутов. Три наиболее эффективных из них: 1) алгоритм Дейкстры (используется для нахождения оптимального маршрута между двумя вершинами); 2)алгоритм Флойда (для нахождения оптимального маршрута между всеми парами вершин); 3)алгоритм Йена (для нахождения k-оптимальных маршрутов между двумя вершинами) В данной курсовой работе будет подробно рассмотрен базисный алгоритм - обход в ширину, и сам поиск кратчайшего пути между двумя вершинами во взвешенном графе – алгоритм Дейкстры. В первой части работы я предоставлю теоретические знания, которые дадут некоторые начальные сведения о графах. В последующих главах будет представлен метод обхода, алгоритм на псевдоязыке и сама реализация в виде программного кода. Теоретическая часть Общие теоретические основы Введем соответствующую терминологию. Граф – это упорядоченная пара множеств Взвешенный граф – граф Не взвешенный граф – граф Ациклический граф – граф, не имеющий циклов.[1] Временная сложность алгоритма – это функция размера входных и выходных данных, равная максимальному количеству элементарных операций, проделываемых алгоритмом для решения экземпляра задачи указанного размера. Во многих задачах размер выхода не превосходит или пропорционален размеру вход – в этом случае можно рассматривать временную сложность как функцию размера только входных данных.[2] Список смежности – эффективный способ представления разреженных графов. Это структура, где для каждой вершины хранится в динамическом списке смежные ей вершины. Разреженный граф – граф, в котором в действительности ребра определены только для малой части возможных пар вершин.[1]. 1.2 Алгоритмы обхода графа 1.2.1 Обход в ширину 1.2.1.1 Метод обхода Обход в ширину (breadth-first traversal) является основой для многих важных алгоритмов для работы с графами. Пусть задан невзвешенный граф Поиск в ширину также может построить дерево поиска в ширину. Изначально оно состоит из одного корня Также можно для каждой вершины 1.2.1.2 Алгоритм обхода Ниже представлен псевдокод алгоритма поиска в ширину. Таблица 1.2 – Псевдокод обхода в ширину.
Оценим время работы для входного графа 1.2.1.4. Корректность Утверждение: В алгоритме поиска в ширину очередь всегда содержит сначала некоторое количество вершин с расстоянием ▲ Докажем это утверждение индукцией по числу выполненных алгоритмом шагов. База: изначально очередь содержит только одну вершину Переход: пусть после l-го шага алгоритма очередь содержит p вершин с расстоянием Теорема: Алгоритм поиска в ширину в невзвешенном графе находит длины кратчайших путей до всех достижимых вершин. ▲ Допустим, что это не так. Выберем из вершин, для которых кратчайшие пути от 1.2.2 Поиск кратчайшего пути 1.2.2.1 Метод обхода Алгоритм Дейкстры является предпочтительным методом поиска кратчайших путей в графах со взвешенными ребрами и/или вершинами. Основная идея данного алгоритма очень похожа на основную идею алгоритма Прима. В каждом цикле мы добавляем одну вершину к дереву вершин, для которых мы знаем кратчайший путь из вершины Разница между алгоритмом Дейкстры и алгоритмом Прима состоит в том, как они оценивают привлекательность каждой вершины вне дерева. В задаче поиска минимального остовного дерева нас интересовал только вес следующего возможного ребра дерева. А при поиске кратчайшего пути нам нужна также информация о ближайшей к вершине Алгоритм находит кратчайший путь от заданной начальной вершины Допустим, что кратчайший путь от вершины Алгоритм Дейкстры работает поэтапно, находя на каждом этапе кратчайший путь от вершины Здесь напрашивает стратегия, аналогичная динамическому программированию. Кратчайший путь от вершины 1.2.2.2 Алгоритм обхода Ниже представлен псевдокод алгоритма поиска кратчайшего пути. Таблица 1.2 – Псевдокод алгоритма Дейкстры.
1.2.2.3 Анализ обхода Временная сложность алгоритма Дейкстры, в том виде, как он реализован здесь, равна Длина кратчайшего пути от начальной вершины start к созданной вершине t равна точно значению distance[t]. Каким образом мы можем найти сам путь с помощью алгоритма Дейкстры? Мы следуем обратным указателям на родительские узлы от вершины t, пока мы не дойдем до начальной вершины (или пока не получим -1, если такого пути не существует). Алгоритм работает правильно только на графах, в которых нет ребер с отрицательным весом. Дело в том, что при построении пути может встретиться ребро с отрицательным весом настолько большим по модулю, что оно полностью изменит оптимальный путь от вершины s к какой-то другой вершине, которая уже включена в дерево.[1] 1.2.2.4. Корректность Теорема: Пусть ▲ Докажем по индукции, что в момент посещения любой вершины На первом шаге выбирается Пусть для Поскольку алгоритм заканчивает работу, когда все вершины посещены, в этот момент
Практическая часть В практической части работы будут представлены коды реализующие алгоритм обхода в ширину и алгоритм нахождения кратчайшего пути.
Популярное: Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... ![]() ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (410)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |