Теорема. Пусть G — связный граф с k вершинами нечетной степени. Тогда минимальное покрытие графа цепями имеет мощность k / 2.
Доказательство. В силу теоремы 4.4 число вершин нечетной степени четно. Следовательно, каждая из k вершин нечетной степени должна быть концом одной из покрывающих цепей графа. Отсюда с необходимостью следует, что число всех покрывающих цепей должно быть не менее, чем k / 2. Расширим граф G до эйлерова графа, добавив k / 2 ребер, соединяющих различные пары вершин нечетной степени. Тогда на графе определен единственный эйлеров цикл. Аннулируя ребра, вместе с каждым аннулированным ребром имеем и новую цепь. Тогда число k / 2 является также и достаточным числом цепей, покрывающих граф.
Для ориентированных графов можно получить аналогичный результат. В частности, имеет место
Теорема. Для того, чтобы на ориентированном графе G существовал контур, содержащий все дуги G, необходимо и достаточно, чтобы число всех входящих и выходящих дуг было одинаковым в каждой из вершин.
Такой контур называется эйлеровым контуром.
3. Гамильтоновы циклы. Оценка временной сложности алгоритмов
Цикл на графе G называется гамильтоновым, если соответствующая ему последовательность ребер содержит каждую вершину графа G в точности один раз.
Аналогично вводится понятие гамильтонова контура на ориентированном графе.
Примеры гамильтонового цикла и графа, для которого такого цикла не существует представлены на рисунке 2.
а) v1 б) v1
v2 v4 v5 v2 v4 v5
v3
v3
Рисунок 2.
На рисунке 2. а) направление одного из гамильтоновых циклов отмечено стрелками. Соответствующий гамильтонов цикл представлен последовательностью ребер {(v1, v4), ( v4, v5), (v5, v3), (v3, v2), (v2, v1)}. Можно заметить, что ребро (v4, v3) в этом цикле не используется. Этот факт указывает на то, что в гамильтоновом цикле могут участвовать не все ребра графа. Существенным в цикле данного типа является наличие всех вершин графа. В связи с этим, в случаях, когда нет кратных ребер, гамильтонов цикл записывают последовательностью вершин. Так в рассмотренном примере гамильтонов цикл можно представить следующей последовательностью вершин: [v1, v4, v5, v3, v2]. Нетрудно заметить, что при такой записи каждый гамильтонов цикл должен соответствовать некоторой допустимой перестановке всех вершин графа. Ясно, что одному и тому же графу можно поставить в соответствие некоторое множество гамильтоновых циклов. Пример на рисунке 2. б) иллюстрирует случай, когда это множество пусто, поскольку вершина v4 необходимо должна быть повторена дважды.
Укажем некоторые задачи, интерпретация которых состоит в необходимости построения гамильтоновых циклов.
Задача о шахматном коне. Можно ли начиная с произвольного поля на шахматной доске ходить конем в такой последовательности, чтобы пройти через все поля и вернуться в исходное?
Задача о званом обеде. Обед накрыт на круглом столе. Среди приглашенных некоторые являются друзьями. При каких условиях можно рассадить всех так, чтобы по обе стороны от каждого из присутствующих сидели его друзья?
Задача о коммивояжере. Коммивояжер должен объездить все n городов. Для того, чтобы сократить свои расходы он хочет построить такой маршрут, чтобы объездить все города точно по одному разу и вернуться в исходный с минимумом затрат.
В настоящее время не получено необходимых и достаточных условий существования для гамильтоновых циклов.
С другой стороны, существует очевидный алгоритм, который казалось бы можно применить к решению любой задачи о гамильтоновом цикле: генерируем все перестановки вершин и проверяем, какая из них является гамильтоновым циклом. Всех перестановок, очевидно, будет n!
Оценим временную сложность этого алгоритма. Под временной характеристикой сложности алгоритма понимают асимптотическую оценку О(f(n1, n2, …nk)) требуемого времени работы компьютера в зависимости от мощностей n1, n2, …, nk множеств исходных данных при неограниченном увеличении этих мощностей. Поскольку компьютеры могут обладать различной производительностью, то оценка временных затрат может быть выражена в количестве элементарных операций: сложений, умножений или других операций, выполняемых компьютером и принятых за основу.
Легко видеть, что ограничением применения предложенного выше метода является то, что для его реализации потребуется О(nn!) вычислительных операций (n операций на каждую из n! перестановок). Так, если n = 20 и каждый элементарный шаг компьютера выполняется за 10-7 с, то решение задачи о построении гамильтонова цикла займет порядка 20*20!48*1018 операций или 45*1011 с, что составляет порядка 1500 веков.
Проблема существования гамильтонового цикла принадлежит к классу так называемых NP‑полных задач. Это широкий класс задач, для которых не известен алгоритм полиномиальной сложности их решения, то есть алгоритм с числом шагов, ограниченных полиномом от размерности задачи. Задача же построения гамильтонового цикла, как указано выше, в максимальном случае решается алгоритмом факториальной сложности.
Для того, чтобы убедиться в том, что значения nn! растут быстрее, чем значения произвольного многочлена, покажем, что они растут быстрее, чем значения показательной функции, начиная с некоторого достаточно большого значения n.
Для этого рассмотрим варианту
Do'stlaringiz bilan baham: |