Upload
nikolay-grebenshikov
View
3.162
Download
7
Embed Size (px)
DESCRIPTION
Citation preview
Хакасский государственный университет им. Н.Ф. Катанова
Структуры и алгоритмы обработки данных
Лекция: Графы: сильно связанные
компоненты, остовные деревья.
Николай Гребенщиков, www.grebenshikov.ru
Проблема связности
В коммуникационных и транспортных сетях важно знать, чтолюбой узел сети доступен из любого другого узла.
Орграф называется сильно связным, если для каждой па-ры вершин u, v ∈ V существует путь из v в u и обратно.
1
Сильно связный компонент графа G есть сильно связныйподграф графа G, причем в него входят максимально воз-можное количество вершин, для которых существуют путитуда и обратно.
2
Сильно связные компоненты и DFS
3
Поиск сильно связных компонентов
FindStrongComp(G)
1 DFS(G) � вычислим f [u] для каждой вершины u
2 R← Reverse(G) � инвертируем все ребра в G3 SortByF (R) � сортируем вершины в R по f [u] по убыванию4 DFS(R)
Результат: каждое DFS-дерево в R яляется сильно связнымкомпонентом.
4
Алгоритм поиска сильно связных компонетов
5
Доказательство теоремы на семинар:
Процедура FindStrongComp(G) корректно вычисляет сильносвязные компоненты ориентированного графа G.
6
Проблема построения сети
Области возникновения: коммуникационные и дорожные се-ти.
Дано: множество узлов сети (хосты, города).
Необходимо: построение сети с наименьшим общим весомребер (длина сетевых кабелей, длина дорог).
Графовая модель: узлы сети являются узлами графа, E =
V 2, нам известны веса всех ребер.
Результат: свободное дерево.
7
Минимальное дерево Стайнера
8
Минимальное остовное дерево
Остовное дерево - ацикличный подграф G1 = (V 1, E1, w1)
графа G = (V,E,w), где E1 ⊆ E, V 1 = V,w1 = w.
Минимальное остовное дерево - остовное дерево с мини-мальным весом. w(G) =
∑(u,w)∈E
w(u,w).
9
Примеры остовных деревьев
10
Подход к поиску МОД
Строим дерево путем добавления по одному ребру, и передкаждой итерацией текущее дерево является подмножествомнекоторого МОД.
GenericMST(G,w)
1 A← 0
2 while A не является МОД3 do Найти безопасное для A ребро (u, v)
4 A← A⋃{(u, v)}
5 return A
11
Разрез (S, V −S) неориентированного графа G = (V,E) естьразбиение множества вершин графа.
12
Ребро (u, v) ∈ E пересекает разрез (S, V − S), если один изего концов находится в S, а другой в V − S.
Разрез согласован с множеством A по ребрам, если ни одноребро из A не пересекает разрез.
Ребро, пересекающее разрез, является легким, если оно име-еит минимальный вес среди всех ребер, пересекающих раз-рез.
13
Теорема
Пусть G = (V,E) - связный неориентированный граф с дей-ствительной весовой функцией w, определенной на E. ПустьA - подмножество E, которое входит в некоторое минималь-ное остовное дерево G, (S, V − S) - разрез G, согласованныйс по ребрам, а (u, v) - легкое ребро, пересекающее разрез(S, V − S). Тогда ребро (u, v) является безопасным для A.
Доказательство на семинар.
14
Алгоритм Крускала
15
Алгоритм Крускала - процедуры
Create− Set(u) - создать множество из одной вершины u.
Find−Set(u) - найти множество, которому принадлежит вер-шина u.
Union(u, v) - объединить множества, которые содержат вер-шины u и v.
Структуры данных для хранения непересекающихся под-множеств на семинар.
16
Алгоритм Крускала
17
Анализ алгоритма Крускала
E ≥ V , так как граф связный.
Создание множеств - Θ(V · αV ) = Θ(V logV ) = Θ(ElogE)
Сортировка ребер - Θ(ElogE).
Цикл выполняется E раз.
Поиск и объединие множеств - Θ(αV ) = Θ(logV ) = Θ(logE)
T (G) = Θ(ElogE)
18
Алгоритм Прима: идея
19
Алгоритм Прима
20
Алгоритм Прима: пример
21
Алгоритм Прима: анализ
T (G) = V +V logV +∑u∈V
(logV +deg(u)logV ) = V +V logV +(V +
2E)logV = Θ(ElogV )
22
На семинар
Алгоритм Барувки (Baruvka)
23
Список литературы
• David M. Mount, The Lecture notes: Design and Analysisof Computer Algorithms. [Электронный ресурс] / Dept. ofComputer Science, University of Maryland, 2004. - Режимдоступа: http://www.cs.umd.edu/ mount/451/Lects/451lects.pdf. - сс.39-49
• Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгорит-мы: построение и анализ, 2-е издание. - М. : Издатель-ский дом “Вильямс”, 2007. сс.644-662.
24