- •Оглавление
- •Введение
- •Комбинаторика в задачах
- •Основной принцип комбинаторики
- •Размещения с повторениями
- •Размещения без повторений
- •Перестановки
- •Сочетания (без повторений)
- •Свойства биномиальных коэффициентов
- •Разбиения множеств
- •Сочетания с повторениями
- •Разные задачи
- •Производящие функции
- •Использование рекуррентных соотношений
- •Формула включений и исключений
- •Комбинаторные величины при больших значениях параметров
- •Множества и функции
- •Множества и простейшие операции над ними
- •Булеан множества
- •Прямое произведение множеств
- •Отношения на множествах
- •Отображения (функции)
- •Мощность множеств
- •Счетные множества
- •Некоторые свойства бесконечных множеств
- •Вопросы для самопроверки
- •Упражнения
- •Основы теории графов
- •Основные понятия
- •Компьютерные представления графов
- •Маршруты и связность
- •Кратчайшие пути в графах
- •Деревья
- •Кодирование деревьев
- •Центр дерева
- •Минимальное остовное дерево (остов)
- •Эйлеровы графы
- •Гамильтоновы графы
- •Графовые векторы
- •Паросочетания и реберные покрытия
- •Паросочетания в двудольных графах
- •Правильная нумерация вершин графа
- •Сетевые графики
- •Потоки в сетях
- •Вопросы для самопроверки
- •Упражнения
- •Рекомендуемая литература
- •Предметный указатель
Деревья
ОПРЕДЕЛЕНИЕ 25. Лесом называется неориентированный граф без циклов. Деревом называется связный лес.
Таким образом, дерево характеризуется тремя свойствами:
- неориентированность,
- связность,
- отсутствие циклов.
Видимо, деревья это самый важный для приложений вид графов. На них базируются многие алгоритмы сортировки и поиска, базы данных и др.
Вершины дерева степени 1 (висящие вершины) называются листьями. Все логично! Какое же дерево без листьев?
Приведем два простых свойства дерева.
ПРЕДЛОЖЕНИЕ.
Всякие две вершины дерева можно соединить единственной цепью.
Если в дереве не менее двух вершин, то у него не менее двух листов.
Доказательство.
Поскольку дерево является связным графом, то всякие его вершины можно соединить хотя бы одной цепью. Если для каких-нибудь вершин таких путей два (или больше), то в графе есть цикл.
Рассмотрим вершины (пусть a,b), цепь между которыми содержит максимальное число дуг. Если какая-нибудь из этих вершин (пусть a) не является листом, то в графе существует дуга (a,c), где вершина c не принадлежит цепи. По первому утверждению вершины b и c соединяются единственной цепью, значит, эта цепь проходит через a и ее длина (число дуг) больше, чем в исходной, что противоречит выбору вершин a и b.
Если изобразить деревья с 1,2,3,4 вершинами, то можно убедиться, что число дуг в них на одну меньше числа вершин. Оказывается, это справедливо для любого дерева. Более того, справедливо и обратное утверждение.
Теорема 17. Для того, чтобы связный неориентированный граф являлся деревом, необходимо и достаточно выполнение равенства q=p1.
Доказательство. Необходимость. Доказывать будем по индукции. Если у дерева одна вершина, то дуг нет, и нужное равенство выполняется. Пусть утверждение справедливо для деревьев с числом вершин p>1 и у графа Г число вершин равно p+1. По предыдущему предложению у графа Г есть лист (пусть a). Если удалить из дерева эту вершину вместе с инцидентной дугой, то, очевидно, получим дерево с p вершинами, у которого по предположению индукции p1 дуга. Таким образом, у графа Г p дуг, что и требовалось.
Достаточность. Пусть связный неориентированный граф не является деревом. Это означает, что в нем есть цикл. В цикле дуг столько же, сколько и вершин. Будем последовательно присоединять остальные вершины графа дугами к уже построенному графу. Поскольку граф связный, это возможно до исчерпания вершин. Таким образом, число использованных дуг равно p, т.е. всего в графе не менее p дуг, противоречие.
Кодирование деревьев
Для помеченных деревьев существует эффективный способ кодирования (его можно использовать для компьютерного представления деревьев).
Найдем лист с минимальным номером, удалим его вместе с инцидентной дугой и запишем номер второй вершины этой дуги. В получившемся после удаления дереве поступаем аналогично и т.д. p2 раза. Таким образом, код является последовательностью длины p2, элементы которой – числа от 1 до p.
Разумеется, код полезен тогда, когда существует метод декодирования, т.е. восстановления дерева по коду. Опишем соответствующий алгоритм. Выпишем произвольный код, а под ним числа от 1 до p. Находим в нижней последовательности минимальное число, которого нет в коде (такие числа существуют, поскольку код короче p), соединяем вершину с этим номером с вершиной, номер которой в коде первый, вычеркиваем из последовательностей оба эти элемента. Далее продолжаем. В конце в нижней последовательности остаются два числа, соответствующие вершины соединяем дугой.
Поскольку коды деревьев это размещения с повторениями, справедлив следующий результат.
Теорема 18 (Кэли). Число помеченных деревьев с p вершинами равно pp2.
Это число гигантское, сопоставимое с p!. Обозреть все помеченные деревья даже при небольших p (порядка 10) невозможно.
