Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Alg_na_graphax.docx
Скачиваний:
9
Добавлен:
18.08.2019
Размер:
493.84 Кб
Скачать

Основные алгоритмы на графах: текст лекций В.Л. Дольников, О.П. Якимова; Яросл. гос. ун-т им. П.Г. Демидова. Ярославль, 2011. с.

Конспект лекций предназначен для студентов специальности «компьютерная безопасность» и «прикладная математика и информатика» математического факультета ЯрГУ, изучающих спецкурс по алгоритмам на графах.

Печатается по решению научно-методического совета Ярославского государственного университета им. П.Г. Демидова

Рецензент – кафедра теории и методики преподавания информатики ЯГПУ им. К.Д. Ушинского, д.ф-м. наук Карасев Р.Н.

©  Ярославский государственный

университет им. П.Г. Демидова, 2011

Содержание

Введение 4

1. Начальные понятия 5

1.1. Основные определения 6

1.2. Представление графа в памяти компьютера 11

1.3. Анализ алгоритмов 16

Упражнения 18

2. Алгоритмы обхода графа 18

2.1. Поиск в ширину 19

2.2. Применение поиска в ширину 22

2.3. Поиск в глубину 24

2. 4. Применение обхода в глубину 27

Упражнения. 31

3. Кратчайшие пути 33

3.1. Алгоритм Дейкстpы 33

3.2. Кратчайшие пути между всеми парами вершин 38

Упражнения. 43

4. Остов минимального веса 44

4.1. Алгоритм Краскала 45

4. 2. Алгоритм Прима 49

4.3. Разновидности остовных деревьев 53

Упражнения. 54

5. Циклы в графах 55

5.1. Эйлеров цикл 56

5.2. Задача китайского почтальона 59

5.3. Гамильтонов цикл и задача коммивояжера 60

5.4. Классы сложности P и NP 61

5.5. Решение NP- полных задач 65

Упражнения. 66

6. Независимые множества и покрытия 66

6.1. Независимые множества 66

6.2. Алгоритм аппроксимации максимального независимого множества методом исключения подграфов. 69

6.3. Вершинное покрытие 77

6. 4. Паросочетания 79

Упражения 82

Список литературы 82

Введение

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

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

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

1. Начальные понятия

Даже в период становления теории графов в ней возникало немало таких задач, решение которых предполагало построение некоторых алгоритмов. Достаточно вспомнить, например, задачу о кёнигсбергских мостах, которую решил в 1736 г. Л.Эйлер. В городе Кёнигсберге (нынешний Калининград) было два острова, соединенных семью мостами с берегами реки Преголя и друг с другом так, как показано на рисунке 1. Задача состояла в следующем: найти маршрут прохождения всех четырех частей суши, который начинался бы с любой из них, кончался бы на этой же части и ровно один раз проходил по каждому мосту. Исключительный вклад Л. Эйлера в решение этой задачи заключается в доказательстве, что такой маршрут построить невозможно.

Рис. 1. Парк в г. Кенигсберге Рис. 2. Граф к задаче о мостах

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

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

Развитие теории графов в конце XIX и в начале XX в. было связано с распространением представлений о молекулярном строении вещества и становлением теории электрических цепей. Сейчас язык и методы теории графов используется не только в математике и традиционных приложениях в химии и электротехнике, но и в информатике, социологии, лингвистике, экономике, генетике. Очевидно, что алгоритмы для работы с графами очень важны.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]