Автор работы: Пользователь скрыл имя, 19 Марта 2013 в 18:53, курсовая работа
Благодаря своей простой формулировке и раздражающей неуловимости она до сих пор остается мощным стимулом исследований различных свойств графов. Настоящее столетие было свидетелем неуклонного развития теории графов, которая за последние десять – двадцать лет вступила в новый период интенсивных разработок. В этом процессе явно заметно влияние запросов новых областей: тео-рии игр и программирования, теории передачи сообщений, электрических сетей и контактных цепей, а также проблем психологии и биологии.
ВВЕДЕНИЕ 3
1. ТЕОРИЯ ГРАФОВ. 4
1.1. Историческая справка. 4
1.2. Основные термины и теоремы теории графов. 9
2. ЗАДАЧИ НА ГРАФАХ. 15
2.1. Описание различных задач на графах. 15
2.2. Нахождение кратчайших путей в графе 16
3. ПРОГРАММА ОПРЕДЕЛЕНИЯ КРАТЧАЙШЕГО ПУТИ В ГРАФЕ 19
3.1. Язык программирования Delphi. 19
3.2. Программа «Определение кратчайшего пути в графе» 20
ЗАКЛЮЧЕНИЕ 25
СПИСОК ЛИТЕРАТУРЫ 27
ПРИЛОЖЕНИЕ 28
Текст программы определения кратчайшего пути в графе 28
Графы нашли применение практически во всех отраслях научных знаний: физике, биологии, химии, математике, истории, лингвистике, социальных науках, технике и т.п. Наибольшей популярностью теоретико-графовые модели используются при исследовании коммуникационных сетей, систем информатики, химических и генетических структур, электрических цепей и других систем сетевой структуры.
Далее перечислим некоторые типовые задачи теории графов и их приложения:
- Задача о кратчайшей цепи
· замена оборудования
· составление расписания движения транспортных средств
· размещение пунктов скорой помощи
· размещение телефонных станций
- Задача о максимальном потоке
· анализ пропускной способности коммуникационной сети
· организация движения в динамической сети
· оптимальный подбор интенсивностей выполнения работ
· синтез двухполюсной сети с заданной структурной надежностью
· задача о распределении работ
- Задача об упаковках и покрытиях
· оптимизация структуры ПЗУ
· размещение диспетчерских пунктов городской транспортной сети
- Раскраска в графах
· распределение памяти в ЭВМ
· проектирование сетей телевизионного вещания
- Связность графов и сетей
· проектирование кратчайшей коммуникационной сети
· синтез структурно-надежной сети циркуляционной связи
· анализ надежности стохастических сетей связи
- Изоморфизм графов и сетей
· структурный синтез линейных избирательных цепей
· автоматизация контроля при проектировании БИС
- Изоморфное вхождение и пересечение графов
· локализация неисправности с помощью алгоритмов поиска МИПГ
· покрытие схемы заданным набором типовых подсхем
- Автоморфизм графов
· конструктивное перечисление структурных изомеров для
производных органических
· синтез тестов цифровых устройств
Начальные понятия
Будем рассматривать ориентированные графы G = <V, E>, дугам которых приписаны веса. Это означает, что каждой дуге <u, v> ÎE поставлено в соответствие некоторое вещественное число a (u, v), называемое весом данной дуги.
Нас будет интересовать нахождение кратчайшего пути между фиксированными вершинами s, t ÎV. Длину такого кратчайшего пути мы будем обозначать d (s, t) и называть расстоянием от s до t (расстояние, определенное таким образом, может быть отрицательным). Если не существует ни одного пути из s в t, то полагаем d (s, t) = ╔ . Если каждый контур нашего графа имеет положительную длину, то кратчайший путь будет всегда элементарным путем, т.е. в последовательности v1,..., vp не будет повторов.
С другой стороны, если в графе существует контур отрицательной длины, то расстояние между некоторыми парами вершин становится неопределенным, потому что, обходя этот контур достаточное число раз, мы можем показать путь между этими вершинами с длиной, меньшей произвольного вещественного числа. В таком случае, можно было бы говорить о длине кратчайшего элементарного пути, однако задача, поставленная таким образом, вероятно будет значительно более сложной, так как, в частности, она содержит в себе задачу существования гамильтонова пути.
Можно дать много практических интерпретаций задачи о кратчайших путях. Например, вершины могут соответствовать городам, а каждая дуга - некоторому пути, длина которого представлена весом дуги. Мы ищем затем кратчайшие пути между городами. Вес дуги также может соответствовать стоимости (или времени) передачи информации между вершинами. В таком случае мы ищем самый дешевый (или самый скорый) путь передачи информации. Еще одну ситуацию получаем, когда вес дуги <u, v> равен вероятности p(u, v) безаварийной работы канала передачи информации. Если предположить, что аварии каналов не зависят друг от друга, то вероятность исправности пути передачи информации равна произведению вероятностей составляющих его дуг. Задачу нахождения наиболее надежного пути легко можно свести к задаче о кратчайшем пути, заменяя веса p(u, v) на a (u, v) = - lg p(u, v).
Сначала рассмотрим алгоритмы нахождения расстояния между вершинами, а не самих путей. Однако, зная расстояние, мы можем при условии положительной длины всех контуров легко определить кратчайшие пути. Для этого достаточно отметить, что для произвольных s, t Î V (s , t) существует вершина v, такая что d (s, t) = d (s, v) + a (v, t).
Действительно, таким свойством обладает предпоследняя вершина произвольного кратчайшего пути из s в t.
Далее мы можем найти вершину u, для которой d (s, v) = d (s, u) + a (u, v), и т.д.
Из положительности длины всех контуров легко следует, что созданная таким образом последовательность t, v, u, ... не сожержит повторений и оканчивается вершиной s.
Очевидно, что она определяет (при обращении очередности) кратчайший путь из s в t.
Таким образом, мы получаем следующий алгоритм:
Алгоритм нахождения кратчайшего пути
Данные: Расстояния D[v] от фиксированной вершины s до всех остальных вершин v Î V, фиксированная вершина t, матрица весов ребер, A[u, v], u, v ÎV.
Результаты: СТЕК содержит последовательность вершин, определяющую кратчайший путь из s в t.
begin
CTEK := Æ ; CTEK Ü t; v:= t;
while v ╧ s do
begin
u := вершина, для которой D[v] = D[u] + A[u, v];
CTEK Ü u;
v:= u
end
end.
Пусть <V, E> -ориентированный граф, | V| = n, | E| = m. Если выбор вершины u происходит в результате просмотра всех вершин, то сложность нашего алгоритма - O(n2). Если мы просматриваем только список ПРЕДШ[v], содержащий все вершины u, такие что u (r) v, то в этом случае сложность будет O(m).
Отметим, что в случае положительных весов ребер задача о кратчайшем пути в неориентированном графе легко сводится к аналогичной задаче для некоторого ориентированного графа. С этой целью достаточно заменить каждое ребро {u, v}двумя дугами á u, vñи áv, uñ , каждая с таким же весом, что и {u, v}. Однако в случае неположительных весов это приводит к возникновению контуров с неположительной длиной.
Далее будем всегда предполагать, что G = < V, E>является ориентированным графом, |V| = n, |E| = m. В целях упрощения изложения и избежания вырожденных случаев при оценке сложности алгоритмов будем исключать ситуации, при которых «большинство» вершин изолированные.
Будем также предполагать, что веса дуг запоминаются в массиве A[u, v], u, v Î V (A[u, v] содержит вес a (u, v)).
Кратчайшие пути от фиксированной вершины
Большинство известных
алгоритмов нахождения расстояния между
двумя фиксированными вершинами s и t опирается на действия,
которые в общих чертах можно представить
следующим образом: при данной матрице
весов дуг A[u, v], u, v Î V, вычисляются некоторые
верхние ограничения D[v] на расстояния от s до всех вершин v ÎV. Каждый раз, когда мы устанавливаем,
что
D[u] + A[u, v] < D[v], оценку D[v] улучшаем: D[v] = D[u] + A[u, v].
Процесс прерывается, когда дальнейшее улучшение ни одного из ограничений невозможно.
Легко можно показать, что значение каждой из переменных D[v] равно тогда d (s, v) - расстоянию от s до v.
Заметим, что для того чтобы определить расстояние от s до t, мы вычисляем здесь расстояния от s до всех вершин графа.
Не известен ни один алгоритм нахождения расстояния между двумя фиксированными вершинами, который был бы существенным образом более эффективным, нежели известные алгоритмы определения расстояния от фиксированной вершины до всех остальных.
Описанная общая схема является неполной, так как она не определяет очередности, в которой выбираются вершины u и v для проверки условия минимальности расстояния. Эта очередности, как будет показано ниже, очень сильно влияет на эффективность алгоритма. Опишем теперь более детально методы нахождения расстояния от фиксированной вершины, называемой источником, его всегда будем обозначать через s, до всех остальных вершин графа.
Сначала представим алгоритм для общего случая, в котором предполагается только отсутствие контуров с отрицательной длиной. С эти алгоритмом обычно связывают имена Л.Р. Форда и Р.Е. Беллмана.
Delphi - язык и среда программирования, относящаяся к классу RAD- (Rapid Application Development - «Средство быстрой разработки приложений») средств CASE - технологии. Delphi сделала разработку мощных приложений Windows быстрым процессом, доставляющим вам удовольствие. Приложения Windows, для создания которых требовалось большое количество человеческих усилий например в С++, теперь могут быть написаны одним человеком, использующим Delphi.
Интерфейс Windows обеспечивает полное перенесение CASE-технологий в интегрированную систему поддержки работ по созданию прикладной системы на всех фазах жизненного цикла работы и проектирования системы.
Delphi обладает широким набором возможностей, начиная от проектировщика форм и кончая поддержкой всех форматов популярных баз данных. Среда устраняет необходимость программировать такие компоненты Windows общего назначения, как метки, пиктограммы и даже диалоговые панели. Работая в Windows , вы неоднократно видели одинаковые «объекты» во многих разнообразных приложениях. Диалоговые панели (например Choose File и Save File) являются примерами многократно используемых компонентов, встроенных непосредственно в Delphi, который позволяет приспособить эти компоненты к имеющийся задаче, чтобы они работали именно так, как требуется создаваемому приложению. Также здесь имеются предварительно определенные визуальные и не визуальные объекты, включая кнопки, объекты с данными, меню и уже построенные диалоговые панели. С помощью этих объектов можно, например, обеспечить ввод данных просто несколькими нажатиями кнопок мыши, не прибегая к программированию. Это наглядная реализация применений CASE-технологий в современном программировании приложений. Та часть, которая непосредственно связана с программированием интерфейса пользователя системой получила название визуальное программирование
Визуальное программирование как бы добавляет новое измерение при создании создании приложений, давая возможность изображать эти объекты на экране монитора до выполнения самой программы. Без визуального программирования процесс отображения требует написания фрагмента кода, создающего и настающего объект «по месту». Увидеть закодированные объекты было возможно только в ходе исполнения программы. При таком подходе достижение того, чтобы объекты выглядели и вели себя заданным образом, становится утомительным процессом, который требует неоднократных исправлений программного кода с последующей прогонкой программы и наблюдения за тем, что в итоге получилось.
Благодаря средствам визуальной разработки можно работать с объектами, держа их перед глазами и получая результаты практически сразу. Способность видеть объекты такими, какими они появляются в ходе исполнения программы, снимает необходимость проведения множества операций вручную, что характерно для работы в среде не обладающей визуальными средствами — вне зависимости от того, является она объектно-ориентированной или нет. После того, как объект помещен в форму среды визуального программирования, все его атрибуты сразу отображаются в виде кода, который соответствует объекту как единице, исполняемой в ходе работы программы.
Размещение объектов в Delphi связано с более тесными отношениями между объектами и реальным программным кодом. Объекты помещаются в вашу форму, при этом код, отвечающий объектам, автоматически записывается в исходный файл. Этот код компилируется, обеспечивая существенно более высокую производительность, чем визуальная среда, которая интерпретирует информацию лишь в ходе исполнения программы.
Программа «Определение кратчайшего пути в графе» разработана в среде «Delphi», работает под ОС «Windows»-95,98,2000,NT.
Программа позволяет вводить, редактировать, сохранять графы в файл, загружать из файла. Также реализован алгоритм нахождения кратчайшего пути.
Интерфейс программы имеет следующий вид:
Верхняя панель кнопок предназначена для редактирования графа.
Кнопка «Загрузить» предназначена для загрузки ранее сохраненного графа из файла.
Кнопка «Сохранить» предназначена для сохранения графа в файл.
Кнопка «Переместить» предназначена для перемещения вершин графа.
Кнопка «Удалить» предназначена для удаления вершин графа.
При нажатии на кнопку «Новый» рабочее поле программы будет очищено и появится возможность ввода нового графа.
Кнопка «Помощь» вызывает помощь программы.
Для очистки результатов
работы алгоритма определения
При нажатии на кнопку «Настройки» на экране появится окно, в котором можно настроить параметры сетки рабочего поля программы и цвета вводимого графа.
Окно настроек выглядит следующим образом:
Нижняя панель кнопок предназначена для установки параметров ввода и запуска алгоритма определения кратчайшего пути в графе. Данная панель состоит из четырех кнопок:
При включенной кнопке «Показывать сетку» отображается сетка для удобства ввода вершин.