Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_ДМ.doc
Скачиваний:
34
Добавлен:
25.08.2019
Размер:
1.16 Mб
Скачать

Лекция № 15 Деревья Эквивалентные определения дерева

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

Существует несколько определений дерева.

1) Связный граф с n вершинами и n – 1 ребрами.

2) Связный граф без циклов.

3) Граф, в котором каждая пара вершин соединена точно одной цепью.

Докажем эквивалентность этих определений.

1) 2). Докажем, что в связном графе с n вершинами и n – 1 ребрами нет циклов. Предположим противное, т.е. цикл есть и e = (u, v) – ребро этого цикла. Удалим это ребро. Тогда граф останется связным, т.к. из u в v можно добраться по другой половинке цикла. В графе G\e n вершин, n – 2 ребер и он связан, т.е. у него 1 компонента связности, k = 1. По 3-й теореме о связности должно быть m = n – 2  n – 1 – противоречие. Следовательно, циклов нет.

2) 3). Хотя бы одна цепь, соединяющая u и v должна быть, т.к. граф связный. Предположим, что цепей не одна, а хотя бы две. Тогда, по свойству 3 маршрута, из них можно составить цикл – противоречие, т.е. 2-й цепи нет.

3) 1). Из 3) следует, что граф связный. Так как каждая пара вершин соединена точно одной цепью, то удаление любого ребра увеличит на 1 число компонент связности. Пусть в графе m ребер. По 3-й теореме о связности должно быть m  n – 1. Удалив 1 ребро, получим m – 1 n – 2, т.к. станет k = 2. Удалив 2 ребра, получим k = 3 и m – 2 n – 3, и т.д. Удалим n – 1 ребер, получим k = n и m – (n – 1) n – n. Но, т.к. k = n, то ребер больше нет. Следовательно, они были удалены за n – 1 шагов, поэтому m = n – 1, ЧТД.

Задание 1. Пусть Т – дерево, Т1, Т2 – его поддеревья. Доказать, что – тоже дерево.

Задание 2. В дереве n > 1. Доказать, что имеется по крайней мере 2 висячих вершины.

4.2. Остов

Def. Пусть G = (V, E) – неориентированный граф с n вершинами. Остовным деревом (остовом) графа G называется дерево T = (V, E1), E1  E.

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

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

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

Алгоритм Краскала. Этот алгоритм применяется для построения остова минимального веса. Пусть имеем граф G = (V, E), в котором каждому ребру присвоен вес (e) – некоторое вещественное число. Основная идея алгоритма: начиная с полностью несвязного графа Т = (V, ), присоединяем к нему ребра графа G в порядке возрастания их веса; если после присоединения очередного ребра в Т может образоваться цикл, то это ребро не присоединяем, а переходим к следующему. Можно доказать, что таким образом строится остов минимального веса.

Машинная реализация алгоритма Краскала. Сложность машинной реализации заключается в следующем.

1). Перед выполнением необходимо, чтобы ребра графа были отсортированы в порядке возрастания веса. Эта операция имеет сложность О(m2), а если граф близок к полному, то О(n4) – достаточно высокая.

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

Алгоритм.

begin T:= ; for i:=1 to n do КОМП[i]:= i;

for j:=1 to m do

begin a:=НАЧАЛО[e[j]];

b:=КОНЕЦ[e[j]];

if КОМП[a] <> КОМП[b] then

begin Т:= T ;

for i:=1 to n do

if КОМП[i] = КОМП[b] then

КОМП[i] := КОМП[a];

end;

end;

end.Оценим вычислительную сложность без сортировки. Просмотр списка ребер – O(m) операций. Внутренний цикл по i от 1 до n – повторяется n – 1 раз, по числу добавляемых ребер. Итого О(m) + О(n2) = О(n2).