Графы. Поиск оптимального маршрута по городам Беларуси

Автор работы: Пользователь скрыл имя, 18 Августа 2012 в 17:42, курсовая работа

Описание работы

В первом разделе «Разработка модели» описывается сущность задачи, применяемая математическая модель. Также описываются способы организации исходных данных. Рассматриваются инструменты реализации алгоритма.
Во втором разделе «Проектирование программы» рассматриваются разрабатываемые функции их структура и реализация.
В третьем разделе «Тестирование» описываются требования к техническим средствам для проведения испытаний, рассматриваются возможные ошибки, представляются результаты тестирования.
В четвертом разделе «Применение» описывается назначение программы, рассматривается практический пример использования программы.
В заключении будет проанализировано созданное программное приложение, определена степень соответствия поставленной задачи и выполненной работы.

Содержание работы

Введение 4
1. Разработка модели
1.1 Сущность задачи 6
1.2 Организация данных 8
1.3 Инструменты разработки 10
2. Проектирование программы
2.1 Описание основных алгоритмов 11
2.2 Описание структуры 12
3. Тестирование
3.1 Технические требования 14
3.2 Полное тестирование 14
4. Применение
4.1 Назначение программы 20
Заключение 21
Литература 22

Файлы: 1 файл

пояснительная записка.docx

— 1.41 Мб (Скачать файл)

УЧЕРЕЖДЕНИЕ ОБРАЗОВАНИЯ

«БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ  ПЕДАГОГИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ  МАКСИМА ТАНКА»

Кафедра прикладной математики и информатики

 

 

 

 

 

 

 

 

 

 

 

«Графы. Поиск оптимального маршрута по городам Беларуси»

 

Пояснительная записка

 

к курсовому проекту по информатике

 

 

 

 

 

 

 

 

 

 

 

 

 

Выполнил

студент математического  факультета

Макаронок Сергей, 304 гр.

 

Руководитель:

ст. преподаватель кафедры

прикладной математики

и информатики

Шутько Е.И.

 

 

 

 

Минск, 2010

Содержание

 

Введение                               4

1. Разработка модели

1.1 Сущность задачи                                       6

1.2 Организация данных                                                8

1.3 Инструменты разработки               10

2. Проектирование программы

2.1 Описание основных алгоритмов                                               11

2.2 Описание структуры                                                12

3. Тестирование

3.1 Технические требования                                     14

3.2 Полное тестирование                                                14

4. Применение

4.1 Назначение программы                                    20

Заключение                                         21

Литература                                         22

Приложение  А                                                23

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Введение

 

Благодаря своему широкому применению, теория о нахождении кратчайших путей в последнее время интенсивно развивается.

Нахождение кратчайшего  пути – жизненно необходимо и используется практически везде, начиная от нахождения оптимального маршрута между двумя  объектами на местности (например, кратчайший путь от дома до университета), в системах автопилота, для нахождения оптимального маршрута при перевозках, коммутации информационного пакета в Internet и  т.п.

Кратчайший путь рассматривается  при помощи некоторого математического  объекта, называемого графом.

Вес пути в графе определяется как сумма весов ребер этого  пути. Кратчайшим путем между двумя  вершинами называется путь наименьшего  веса, соединяющий эти вершины. Будем рассматривать задачу отыскания кратчайших путей от заданной вершины  до всех остальных вершин графа.

Наиболее эффективными алгоритмами нахождения кратчайшего пути являются следующие:

  • алгоритм Дейкстры (используется для нахождения оптимального маршрута между двумя вершинами);
  • алгоритм Флойда (для нахождения оптимального маршрута между всеми парами вершин);

Указанные алгоритмы легко  выполняются при малом количестве вершин в графе. При увеличении их количества задача поиска кратчайшего  пути усложняется.

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

С помощью алгоритма Флойда-Уоршола  можно найти кратчайшие пути между всему парами вершин за O (N3), где N - количество вершин в графе.

Основной задачей данного  курсового проекта под названием «Графы. Поиск оптимального маршрута по городам Беларуси»,  является программная реализация алгоритма поиска кратчайшего пути между двумя любыми вершинами графа.

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

Данная программа может  использоваться в дискретной математике для исследования графов или в  качестве наглядного пособия, демонстрирующего применение алгоритма Флойда на практике.

Пояснительная записка состоит  из четырех разделов содержащих информацию по составлению и применению программы.

В первом разделе «Разработка  модели» описывается сущность задачи, применяемая математическая модель. Также описываются способы организации  исходных данных. Рассматриваются инструменты  реализации алгоритма.

Во втором разделе «Проектирование программы» рассматриваются разрабатываемые функции их структура и реализация.

В третьем разделе «Тестирование» описываются требования к техническим  средствам для проведения испытаний, рассматриваются возможные ошибки, представляются результаты тестирования.

В четвертом разделе «Применение» описывается назначение программы, рассматривается практический пример использования программы.

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

Приложение должно содержать текст программы.

 

 

 

1 Разработка модели

 

1.1 Сущность задачи

 

Кратчайший путь рассматривается  при помощи некоторого математического  объекта, называемого графом.

Граф G (рис.2.1.1) задается множеством точек (вершин) х1, х2,...,хn. (которое обозначается через Х) и множеством линий (ребер) а1, а2,...,аm. (которое обозначается символом А), соединяющих между собой все или часть этих точек. Таким образом, граф G полностью задается (и обозначается) парой (Х, А). Если ребра из множества А ориентированы, что обычно показывается стрелкой, то они называются дугами, и граф с такими ребрами называется ориентированным графом.

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

Если ребра не имеют  ориентации, то граф называется неориентированным, (двухстороннее движение).

В ориентированном графе  дуга обозначается упорядоченной парой, состоящей из начальной и конечной вершин, ее направление предполагается заданным от первой вершины ко второй.

Путем (или ориентированным  маршрутом) ориентированного графа  называется последовательность дуг, в  которой конечная вершина всякой дуги, отличной от последней, является начальной вершиной следующей.

При рассмотрении пути µ  представленного последовательностью  дуг (ä1, ä2,..., äq), за его вес принимается число l(µ), равное сумме весов всех дуг, входящих в µ, т.е.

         (1)

Метод Флойда позволяет найти  кратчайшие пути между всеми парами вершин графа.

Обозначим lij длину дуги (xi, xj), если таковой не существует примем lij = ¥, кроме того, положим lii = 0. Обозначим длину кратчайшего из путей из xi в xj с промежуточными вершинами из множества {x1, …, xm}. Тогда можно получить следующие уравнения

, (2)

. (3)

Уравнение (2) очевидно. Обоснуем уравнение (3).

Рассмотрим кратчайший путь из xi в xj с промежуточными вершинами из множества {x1, …, xm, xm+1}. Если этот путь не содержит xm+1, то . Если же он содержит xm+1, то деля путь на отрезки от xi до xm+1 и от xm+1 до xj, получаем равенство .

Уравнения (2) и (3) позволяют  легко вычислить матрицу расстояний [dij] между всеми парами вершин графа G(X, E). На первом этапе согласно (2) составляем n´n матрицу равную матрице [lij] весов ребер (n – число вершин G(X, E)). n раз производим вычисление по итерационной формуле (3), после чего имеем – матрицу расстояний.

Отметим, что алгоритм Флойда непосредственно не указывает сам  кратчайший путь между вершинами, а  только его длину.

Алгоритм Флойда можно  модифицировать таким образом, чтобы  можно было находить и сами пути. Для этого получим вспомогательную  матрицу [Rij], которая будет содержать наибольший номер вершины некоторого кратчайшего пути из xi в xj (Rij=0, если этот путь не содержит промежуточных вершин).

Эта матрица вычисляется  параллельно с  по следующим правилам

           (4)

Последнее выражение следует  из обоснования (3).

Теперь кратчайший путь выписывается из следующего рекурсивного алгоритма:

Кратчайший путь из xi в xj:

1°. Если Rij = 0  то выполнить 2°,

иначе выполнить 3°.

2°. Если i=j  то выписать xi и закончить,

иначе выписать xi и xj закончить.

3°. Выписать кратчайший путь между xi и .

4°. Выписать кратчайший путь между и xj.

Пункты 3° и 4° предполагают рекурсивное обращение к рассмотренному алгоритму.

Для вывода кратчайшего пути для заданных двух вершин, необходимо еще модифицировать алгоритм Флойда. В рассмотренный алгоритм необходимо вставить проверку: совпадает ли текущая  вершина xi с начальной, а xj с конечной вершиной искомого пути.

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

Компьютерные средства и  информационные технологии повысили возможности  такого всеохватывающего метода изучения и создания, как моделирования  объектов, явлений и процессов  – как тех, что существуют в  природе, так и тех, что создаются  человеком искусственно.

Количество объектов усложнялись, увеличивались, и  натурное моделирование (макеты сооружений) стало невыгодным, неэкономным. Поэтому для изучения начали применять математику. Использование математических моделей – уравнения, неравенства,  формулы  и тому подобное называется математическим моделированием, для развития и приспособления которого нужны были эффективные численные методы.

Реализовать большой потенциал  математического моделирования  невозможно без мощных средств автоматизации  вычислений, которыми являются компьютеры. Благодаря появлению компьютеров и развитию информационных технологий создаются методы и средства компьютерного моделирования, способные решать сложные практические задачи, такие как: управление большими энергетическими системами, создание достоверных прогнозов погоды или урожая, моделирование региональных и общегосударственных систем, проектирование самолетов, кораблей и т. п. Компьютерная модель – это размещенная в компьютере совокупность средств, что реализуют концепцию вычисления.

 

1.2 Организация данных

Для удобства, все данные целесообразно записать в стандартный блокнот.

Рассмотрим это на примере:

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

Рассмотрим пример организации файла для графа, представленного на рисунке 1:

рисунок 1 - ориентированный  граф

 

Для данного графа файл выглядит следующим образом:

 

Таблица 1.2.1–Описание  переменных

Переменная

Тип

Описание

SizeMatrix

int

Количество точек (вершин) грифа

i,j

int

Счётчики

ot

int

Номер начальной точки (вершины)

do

int

Номер конечной точки (вершины)

MatrixWeight [i,j]

int

Массив i-j элемент которого содержит расстояние между i-й и j-й точками (вершинами)

Замечание:

  1. с[i][i]=0;
  2. c[i][j]=c[j][i].

MatrixPath [i,j]

int

Массив строк, который  содержит пути

Замечание:

После прохождения обработки  по алгоритму Флойда p-й элемент массива содержит кратчайший путь.

WeightPath

int

Длина пути между двумя  вершинами.

Замечание:

После прохождения обработки  по алгоритму Флойда - содержит длину  кратчайшего  пути.

cont

int

Переменная служит для  определения выбранного варианта вывода информации.

Информация о работе Графы. Поиск оптимального маршрута по городам Беларуси