Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭММ (ОЗО) новое.doc
Скачиваний:
17
Добавлен:
29.04.2019
Размер:
4.12 Mб
Скачать

5. Сети Эйлеровы и гамильтоновы графы. Деревья

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

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

Вершина графа называется четной, если число всех выходящих из нее (или, что то же, входящих в нее) ребер четно, и нечетной, если число всех выходящих из нее (или, что то же, входящих в нее) ребер нечетно. Вершина А на рисунке 36 четна (из нее выходит четыре ребра), а верши­на В нечетна (из нее выходит три ребра).

Наконец, последнее: граф называется конечным, если конечны и число его ребер, и число его вершин.

Всюду в дальнейшем мы будем рассматривать только конечные и связные графы.

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

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

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

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

Ясно, что минимальное число вершин додекаэдра, которые нужно посетить, проходя по его ребрам с тем, чтобы пройти все, не меньше числа его вершин.

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

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

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

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

Важный класс графов составляют графы, называемые деревьями. Дерево — это связный граф, который вовсе не имеет замкнутых путей.

Этот граф обладает следующим оптимальным свойством: среди всех связных графов с данным числом вершин дерево имеет наименьшее число ребер, а именно:

число V вершин дерева и число Е его ребер различаются на единицу

Справедливо и обратное утверждение:

V=E+1,

если число вершин связного графа на единицу больше числа его ребер, то этот граф является деревом.

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

Это можно сделать, например, так. Пометим произвольную вершину графа, выберем какое-нибудь исходящее из нее ребро графа и пометим вершину, в которую это выбранное ребро входит. Если пара помеченных вершин не исчерпывает множества всех вершин графа, выбираем ребро графа, выходящее из одной из двух этих вершин в какую-нибудь третью непомеченную вершину этого графа, и помечаем ее. В случае если полученная тройка помеченных вершин не исчерпывает множества всех вер­шин графа, выбираем ребро графа, выходящее из одной из трех этих вершин в какую-нибудь четвертую непомеченную вершину этого графа, и помечаем ее. Продолжая описанную процедуру далее, мы неизбежно придем к ситуации, когда все вершины заданного графа окажутся помеченными. Напомним, что число вершин графа конечно, и если оно равно п, то потребуется ровно n-1 шаг, на каждом из которых (кроме первого) помечается ровно одна новая (непомеченная) вершина графа. Множество выбранных ребер и помеченных вершин будет искомым деревом.

Всякое такое дерево называют деревом, порождающим граф, или порождающим деревом графа, или остовом графа, или его стягивающим остовом.

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

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

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

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

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

Рассмотрим несколько характерных задач.