Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Баушев, Гадасина - Оптимизационные задачи на се...doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
4.39 Mб
Скачать
    1. § 2. Задача полного перебора всех деревьев данного порядка. Код Прюфера. Теорема Кэли.

В настоящем пособии мы будем рассматривать оптимизационные задачи на деревьях, имеющие следующую структуру.

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

. (4.2)

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

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

Определение 4.4. Пусть – связный граф. Подграф называется остовным деревом, или остовом или каркасом графа , если и – дерево.

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

Рис. 4.2. Все остовы полного графа . Для каждого остова указан

его код Прюфера.

Предложение 4.2. Предположим, что в графе степень каждой вершины не меньше 2. Тогда граф содержит цикл.

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

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

Определение 4.5. Вершины степени 1 в графе называются висячими. Если граф является корневым деревом, то висячие вершины, отличные от корня, также называют листьями.

Предложение 4.3. Каждое дерево порядка имеет, по крайней мере, две висячие вершины.

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

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

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

находим висячую вершину с наименьшим значением метки;

записываем в код Прюфера метку вершины, смежной с вершиной, найденной на предыдущем шаге;

удаляем рассматриваемую висячую вершину и инцидентное ей ребро.

Повторив шаги раза, получим код Прюфера исходного дерева. Например, для дерева, изображенного на рис. 4.1,а, найдем следующий код: .

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

Предположим, что задан код Прюфера , , Процедура декодирования включает следующие шаги:

находим вершину с наименьшим значением метки;

проводим ребро ;

удаляем вершину из множества и элемент из кода .

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

На рис. 4.3 приведен результат работы процедуры декодирования для кода . Над каждым ребром указан номер итерации, в результате которой данное ребро включается в дерево. Метки вершин обозначены так же как на рис. 4.1.а.

Рис. 4.3. Процедура декодирования кода Прюфера

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

Теорема Кэли. Число всех помеченных деревьев порядка равно .

Следствие 4.3. Число всех корневых (ориентированных) деревьев порядка равно .

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