- •Оглавление
- •Введение
- •Комбинаторика в задачах
- •Основной принцип комбинаторики
- •Размещения с повторениями
- •Размещения без повторений
- •Перестановки
- •Сочетания (без повторений)
- •Свойства биномиальных коэффициентов
- •Разбиения множеств
- •Сочетания с повторениями
- •Разные задачи
- •Производящие функции
- •Использование рекуррентных соотношений
- •Формула включений и исключений
- •Комбинаторные величины при больших значениях параметров
- •Множества и функции
- •Множества и простейшие операции над ними
- •Булеан множества
- •Прямое произведение множеств
- •Отношения на множествах
- •Отображения (функции)
- •Мощность множеств
- •Счетные множества
- •Некоторые свойства бесконечных множеств
- •Вопросы для самопроверки
- •Упражнения
- •Основы теории графов
- •Основные понятия
- •Компьютерные представления графов
- •Маршруты и связность
- •Кратчайшие пути в графах
- •Деревья
- •Кодирование деревьев
- •Центр дерева
- •Минимальное остовное дерево (остов)
- •Эйлеровы графы
- •Гамильтоновы графы
- •Графовые векторы
- •Паросочетания и реберные покрытия
- •Паросочетания в двудольных графах
- •Правильная нумерация вершин графа
- •Сетевые графики
- •Потоки в сетях
- •Вопросы для самопроверки
- •Упражнения
- •Рекомендуемая литература
- •Предметный указатель
Центр дерева
Под расстоянием d(a,b) между вершинами неориентированного графа, как и ранее, понимается минимальное число дуг в пути, соединяющем эти вершины.
ОПРЕДЕЛЕНИЕ
26.
Эксцентриситетом
вершины
a
неориентированного связного графа
называется величина
,
т.е. максимальное из расстояний от
вершины a
до всех вершин графа. Радиусом
графа
называется минимальный из эксцентриситетов
вершин графа. Диаметром
графа
называется максимальный из эксцентриситетов
вершин графа. Центром
графа
называется множество вершин,
эксцентриситеты которых равны радиусу.
Центр дерева устроен очень просто.
Теорема 19. Центр дерева состоит либо из одной, либо из двух смежных вершин.
Доказательство. В деревьях, состоящих из одной или двух вершин эксцентриситеты вершин равны соответственно 0 или 1, т.е. центры таких графов совпадают с самими деревьями. Пусть в дереве не менее трех вершин. Удалим из дерева все листья. В результате получим дерево, эксцентриситеты всех вершин которого меньше, чем в исходном графе, на 1 (максимум расстояний от какой-нибудь вершины достигается на листьях). Отсюда, по определению центр полученного дерева совпадает с центом исходного. Повторяя эту процедуру, получим дерево, в котором либо одна, либо две вершины, что и требовалось.
Радиус дерева равен числу проведенных отсечений (если остается одна вершина), либо на 1 больше (если остается две вершины).
Минимальное остовное дерево (остов)
Пусть некоторое семейство пунктов требуется связать сетью дорог. Известна стоимость прокладки дороги между теми парами пунктов, для которых это возможно. Стоимость прокладки сети дорог должна быть минимальной.
Естественно, сеть дорог должна быть связной (любой пункт должен быть доступен из любого другого). В сети не должно быть циклов (иначе стоимость прокладки можно уменьшить, исключив строительство какой-нибудь дороги из цикла). Отсюда следует, что оптимальная сеть дорог является остовным подграфом исходного графа потенциальных дорог. Таким образом, задача построения остовного дерева в неориентированном графе, минимального по суммарному весу дуг, является естественной.
Известно множество эффективных алгоритмов решения этой задачи. В основном они были разработаны в середине 20 века. Приведем один из них – алгоритм Прима.
Суть этого алгоритма в следующем. На каждой итерации вершины разбиты на два класса. Вершины первого класса уже включены в дерево. Добавляется в дерево та вершина из второго класса, для которой минимален вес дуги до вершин второго класса.
Технически этот подход, как и в алгоритме Дейкстры, реализуется приданием вершинам пометок. У вершин первого класса они постоянные, у остальных – временные. В данном случае удобно, чтобы пометки состояли из двух частей: вторая это минимальный из весов дуг, соединяющих данную вершину с временной пометкой до вершин с постоянными пометками, первая – номер той вершины с постоянными пометками, для которой этот минимум достигается.
Сформированную часть дерева будем обозначать через ГS=(US,ES). Далее для обозначения вершин будут использоваться их номера.
Шаг 0 (инициализация). US={1}, ES=. (Вообще говоря, в качестве начальной вершины дерева можно принять любую вершину.) Все вершины кроме первой снабжаем пометками [1,c(1,i)] (вторая часть пометки – вес дуги между первой и i-й вершинами). Далее пометку i-й вершины обозначаем [(i),(i)].
Шаг 1. Находим вершину j* с временной пометкой с минимальным значением (i). Положим
US:=US{j*}, ES:=ES( j*,( j*)).
Пометка вершины j* становится постоянной.
Шаг 2. Если |US|=p (т.е. все вершины включены в дерево) то конец иначе переход к шагу 3.
Шаг 3 (обновление пометок). Если для jUS ((j)>c(j,j*)) то ((j):=c(j,j*), (j):= j*). Переход к шагу 1.
Этот алгоритм также удобно реализовывать в виде таблицы.
