Алгоритм перебора робертса - флореса

( алгоритм поиска гамильтонова цикла ).

Выбирается некоторая начальная вершина графа v1. Эта вершина образует первый элемент множества S: S = {v1}. Множество S на каждом шаге будет хранить уже найденные вершины гамильтоновой цепи. К S добавляется первая вершина (пусть это вершина a) в столбце v1. Затем к S добавляется первая возможная вершина в столбце a. Пусть это вершина b, затем к S добавляется первая возможная вершина (например, с) в столбце b и т.д.

S = { v1, a, b, с, . . .}

Под «возможной» понимается вершина, которой нет в S.

Пусть множество S на шаге r имеет вид: S = { v1, a, b, c, …, vr-1, vr}.

Существует две причины, препятствующих включению некоторой вершины во множество S.

1. В столбце vr нет возможной вершины (множество S нельзя расширить).

2. Цепь, определеляемая последовательностью вершин в множестве S, имеет длину p-1, где p – количество вершин графа, т. е. она является гамильтоновой цепью.

Во втором случае тоже 2 варианта:

а) в графе G существует ребро (vr,v1), следовательно, найден гамильтонов цикл;

б) ребро (vr,v1) не существует, следовательно, гамильтонов цикл не может быть получен.

В случаях 1) и 2б) следует прибегнуть к возвращению, а в случае 2а) прекратить поиск (если необходимо найти только один гамильтонов цикл) или (если нужны все гамильтоновы циклы) прибегнуть к возвращению. Возвращение состоит в удалении последней включенной вершины из S, после чего множество S примет вид: S = {v1, a, …, vr-1} и добавлении к S первой возможной вершины, следующей за vr в столбце vr-1. Если не существует никакой возможной вершины, то делается следующий шаг возвращения и т. д.

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

Пример:

 
  алгоритм перебора робертса - флореса - student2.ru

“2”

 
  алгоритм перебора робертса - флореса - student2.ru

“3”

 
  алгоритм перебора робертса - флореса - student2.ru

“5”

18) S = {1, 5}

19) S = {1, 5, 4}

20) S = {1, 5, 4, 3}

21) S = {1, 5, 4, 3, 2} - Г

22) S = {1, 5, 4, 3}

23) S = {1, 5, 4}

24) S = {1, 5}

25) S = {1}

26) S = Æ

ЗАДАЧА КОММИВОЯЖЕРА И ЗАДАЧА КИТАЙСКОГО ПОЧТАЛЬОНА

Задача коммивояжера- это обобщение задачи о поиске гамильтонова цикла в графе.

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

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

Задача китайского почтальона - это обобщение задачи о поиске эйлерового цикла в графе.

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

ОСНОВЫ ЦИКЛОМАТИКИ

Рассмотрим (p,q)-граф, имеющий k компонент связности.

Число алгоритм перебора робертса - флореса - student2.ru (G) = q – p + k называется цикломатическим числом, илициклическим рангом; число алгоритм перебора робертса - флореса - student2.ru (G) = p – k называется коциклическим рангом.

Теорема. Количество ребер остова (ветвей) произвольного графа G равно его коциклическому рангу, а количество ребер, которые необходимо удалить для построения остова (хорд), равно его циклическому рангу.

Каждому циклу графа ставится в соответствии вектор длиной q, где q – количество ребер графа G.

zc = (z1,z2,…,zq), где

zi = алгоритм перебора робертса - флореса - student2.ru

Пример:

алгоритм перебора робертса - флореса - student2.ru

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

Пусть z, алгоритм перебора робертса - флореса - student2.ru , …, алгоритм перебора робертса - флореса - student2.ru - некоторые вектора пространства, тогда если

z = алгоритм перебора робертса - флореса - student2.ru * алгоритм перебора робертса - флореса - student2.ru , где алгоритм перебора робертса - флореса - student2.ru Î {0, 1}, а алгоритм перебора робертса - флореса - student2.ru - есть операция сложения по mod 2,

то вектор z - линейная комбинация векторов алгоритм перебора робертса - флореса - student2.ru , …, алгоритм перебора робертса - флореса - student2.ru .

Векторы z1, z2, …, zk называются линейно независимыми, если никакой вектор этого множества не может быть представлен в виде линейной комбинации остальных.

Векторы z1, z2, …, zk образуют базис в векторном пространстве, если:

1) они линейно независимы;

2) любой вектор этого пространства можно представить в виде линейной комбинации остальных векторов.

Циклы, соответствующие базисным векторам, образуют базис циклаграфа G и называются базисными, или фундаментальными.

Теорема Эйлера. Число базисных векторов (циклов) постоянно и равно его цикломатическому числу (циклическому рангу):

алгоритм перебора робертса - флореса - student2.ru (G) = q – p + k.

Следствие 1. Если алгоритм перебора робертса - флореса - student2.ru (G) = 0, то граф G является ациклическим.

Следствие 2.Если алгоритм перебора робертса - флореса - student2.ru (G) = 1, то граф содержит один единственный простой цикл.

Следствие 3. алгоритм перебора робертса - флореса - student2.ru (G) ³ 0.

Базисной системой циклов G называется множество всех циклов графа, каждый из которых содержит ровно одну хорду для произвольного заданного остова T. Эта система векторов образует базис, поскольку каждый из этих циклов содержит ребро (хорду), не принадлежащее ни одному из остальных циклов, следовательно, они линейно независимы, и все остальные циклы могут быть выражены в виде линейной комбинации этих циклов.

Наши рекомендации