Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив2 / курсовая docx200 / kursovaya(59).docx
Скачиваний:
58
Добавлен:
07.08.2013
Размер:
281.01 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»

Факультет Информационной Безопасности

Пояснительная записка к курсовой работе по дисциплине «Основы Кибернетики»: «Программа построения гамильтонова цикла в графе, используя алгоритм с возвратом»

Выполнил: ______________ В.С. Ирицян (подпись) ст. группы И-11

Проверил: ______________ В.М. Федоров (подпись) преп. каф. БИТ

Содержание

Введение ...…….……………………………………………..…......... 3

  1. Теоретическая часть...…………………………………………….….……… 4

  2. Описание алгоритма работы. Блок-схема………..………………….…….. 8

  3. Примеры решения задач…...………………………………………............. 10

Список используемой литературы.……………………………………..….. 14

Введение

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

Название «гамильтонов цикл» произошло от задачи «Кругосветное путешествие» предложенной ирландским математиком Вильямом Гамильтоном в 1859 году. Нужно было, выйдя из исходной вершины графа, обойти все его вершины и вернуться в исходную точку. Граф представлял собой укладку додекаэдра, каждой из 20 вершин графа было приписано название крупного города мира.

1.Теоритическая часть

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

Любой граф G можно превратить в гамильтонов граф, добавив достаточное количество вершин. Для этого, например, достаточно к вершинам v1,…,vp графа G добавить вершины u1,…,up и множество ребер {(vi,ui)} {(ui,vi+1)}. Степенью вершины v называется число ребер d(v), инцидентных ей, при этом петля учитывается дважды. В случае ориентированного графа различают степень do(v) по выходящим дугам и di(v)- по входящим.

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

Простой (гамильтонов) цикл выделен сплошной линией (1, 2), (2, 3), (3, 4), (4, 5), (5, 1). Заметим, что если граф имеет один гамильтонов цикл, то он может иметь и другие гамильтоновы циклы.

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

Не является гамильтоновым и граф, представляющий собой простой цикл с "перекладиной", на которой расположены одна или несколько вершин.

Теорема (Дирак, 1952) 1. Если в простом графе с n > 3 вершинами p(v) > n/2 для любой вершины v, то граф G является гамильтоновым. 

Замечание. Существует несколько доказательств этой широко известной теоремы, здесь мы приводим доказательство Д. Дж. Ньюмана.

Доказательство. Добавим к нашему графу k новых вершин, соединяя каждую из них с каждой вершиной из G. Будем предполагать, что k -- наименьшее число вершин, необходимых для того, чтобы полученный граф G стал гамильтоновым. Затем, считая, что k > 0, придем к противоречию.

Пусть v>p>w>…>v гамильтонов цикл в графе G, где v, w-- вершины из G, а p-- одна из новых вершин. Тогда w не является смежной с v, так как в противном случае мы могли бы не использовать вершину p, что противоречит минимальности k. Более того, вершина, скажем, w, смежная вершине w, не может непосредственно следовать за вершиной v, смежной вершине v, потому что тогда мы могли бы заменить v>p>w>…>v> w>v на v>v>…>w>w>…>v, перевернув часть цикла, заключенную между w и v. Отсюда следует, что число вершин графа G, не являющихся смежными с w, не меньше числа вершин, смежных с v (то есть равно, по меньшей мере, n/2 + k); с другой стороны, очевидно, что число вершин графа G, смежных с w, тоже равно, по меньшей мере, n/2 + k. А так как ни одна вершина графа G не может быть одновременно смежной и не смежной вершине w, то общее число вершин графа G, равное n + k, не меньше, чем n + 2k. Это и есть искомое противоречие.

Теорема (Оре) 2. Если число вершин графа G(V, E) n > 3 и для любых двух несмежных вершин u и v выполняется неравенство: d(u)+d(v)>n и (u,v)E, то граф G - гамильтонов. Граф G имеет гамильтонов цикл если выполняется одно из следующих условий:

1. Условие Бонди: из d(vi)>i и d(vk)>k=>d(vi)+d(vk)>n(ki)

2. Условие Хватала: из d(vk)>k>n/2=>d(vn-k)>nk.

Далее, известно, что почти все графы гамильтоновы, то есть где H(p) - множество гамильтоновых графов с p вершинами, а G(p) -- множество всех графов с p вершинами. Задача отыскания гамильтонова цикла или эквивалентная задача коммивояжера являются практически востребованными, но для нее неизвестен (и, скорее всего не существует) эффективный алгоритм решения.

Есть такие задачи, для решения которых приходится организовывать полный перебор возможных вариантов. Перебор с возвратом (backtracking) –это общий метод упорядоченного перебора. Перебор с возвратом особенно удобен для решения задач, требующих проверки потенциально большого, но конечного числа решений. В самом общем случае мы полагаем, что решение можно записать как вектор (массив переменной длины) B = (b1,b2,…,bn), удовлетворяющий заданным условиям и ограничениям, или как множество таких векторов. При этом в одних задачах размерность решения (число n) может быть известна заранее, а в других заранее не определена.

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

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

  • Находятся недопустимые значения переменных и проверяется, не стали ли некоторые ограничения противоречивыми. Если такие ограничения есть, то текущая подзадача решений не имеет

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

  • Выполняется цикл, в котором

  1. Перебираются допустимые значения текущей переменной

  2. Для каждого значения переменной производится вызов процедуры решения задачи

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

Соседние файлы в папке курсовая docx200