Оцените презентацию от 1 до 5 баллов!
Тип файла:
ppt / pptx (powerpoint)
Всего слайдов:
31 слайд
Для класса:
1,2,3,4,5,6,7,8,9,10,11
Размер файла:
544.00 kB
Просмотров:
50
Скачиваний:
0
Автор:
неизвестен
Слайды и текст к этой презентации:
№1 слайд![Построение и анализ](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img0.jpg)
Содержание слайда: Построение и анализ алгоритмов
Лекция 10.1
Раздел: Алгоритмы на графах
Тема лекции:
Применение поиска в глубину.
Нахождение в графе компонент двусвязности
№2 слайд![Нахождение компонент](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img1.jpg)
Содержание слайда: Нахождение компонент двусвязности графа
(biconnected components)
№3 слайд![Точки сочленения и двусвязные](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img2.jpg)
Содержание слайда: Точки сочленения и двусвязные компоненты
№4 слайд![Точки сочленения и двусвязные](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img3.jpg)
Содержание слайда: Точки сочленения и двусвязные компоненты
Равнозначное утверждение:
Точка сочленения – такая вершина a V, что существуют вершины графа v и u , отличные от a, такие, что каждый путь* из v в u проходит через вершину a.
* предполагаем, что хотя бы один такой путь существует, т.к. рассматривается связный граф или связная компонента
№5 слайд![Граф G двусвязный](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img4.jpg)
Содержание слайда: Граф G – двусвязный (неразделимый), если он связный и не содержит точек сочленения.
Граф G – двусвязный (неразделимый), если он связный и не содержит точек сочленения.
Компонента двусвязности (или блок) графа G – максимальный* двусвязный подграф графа G.
* Максимальный по включению, т.е. не входящий ни в какой другой двусвязный подграф.
№6 слайд![Тривиальный алгоритм](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img5.jpg)
Содержание слайда: Тривиальный алгоритм: перебираем все вершины - идентифицируем точки сочленения, определяя количество компонент связности, и выделяем блоки. Сложность O (m*n).
Тривиальный алгоритм: перебираем все вершины - идентифицируем точки сочленения, определяя количество компонент связности, и выделяем блоки. Сложность O (m*n).
Алгоритм на базе поиска в глубину
№7 слайд![В основе Свойство DFS-остова](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img6.jpg)
Содержание слайда: В основе –
Свойство DFS-остова (глубинного остовного дерева) [см.лекцию 8.1, сл.25-26]
Пусть (V, T) – DFS-остов графа G = (V, E) и пусть {u, v}E. Тогда либо u потомок v (в дереве), либо v потомок u.
№8 слайд![Свойство TDFS-остова](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img7.jpg)
Содержание слайда: Свойство TDFS-остова (глубинного остовного дерева)
Иллюстрация к доказательству:
{u,v} E
v посещена раньше, чем u
numVert[v] < numVert[u]
r – корень TDFS
№9 слайд![Замечание По схеме AB, not B](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img8.jpg)
Содержание слайда: Замечание
По схеме AB, not B not A.
№10 слайд![Теорема Пусть D V, T](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img9.jpg)
Содержание слайда: Теорема: Пусть D = (V, T) – глубинное остовное дерево связного графа G = (V, E) с корнем дерева r.
Теорема: Пусть D = (V, T) – глубинное остовное дерево связного графа G = (V, E) с корнем дерева r.
Вершина a V является точкой сочленения графа G ттогда, когда выполнено одно из условий:
a = r и a имеет более одного сына в D (хотя бы двух);
a r и существует s = сын (a) , такой что НЕТ обратных ребер, идущих от потомков вершины s (в том числе самой s) к предкам вершины a.
№11 слайд![Примеры -](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img10.jpg)
Содержание слайда: Примеры - 1
№12 слайд![Примеры -](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img11.jpg)
Содержание слайда: Примеры - 2
№13 слайд![Примеры -](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img12.jpg)
Содержание слайда: Примеры - 3
№14 слайд![Доказательство a r и условие](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img13.jpg)
Содержание слайда: Доказательство: 2) a r и условие 2 выполнено.
Доказательство: 2) a r и условие 2 выполнено.
№15 слайд![либо есть обратное ребро.](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img14.jpg)
Содержание слайда: … либо есть обратное ребро. Покажем, что это противоречит тому, что a – точка сочленения. Далее – два случая.
… либо есть обратное ребро. Покажем, что это противоречит тому, что a – точка сочленения. Далее – два случая.
№16 слайд![Тогда опять либо нет](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img15.jpg)
Содержание слайда: Тогда опять либо нет обратного ребра v w и тогда условие выполнено, либо есть v w, но тогда существует путь между x и y , проходящий не через a (см. рисунок), что противоречит предположению, что a – точка сочленения.
Тогда опять либо нет обратного ребра v w и тогда условие выполнено, либо есть v w, но тогда существует путь между x и y , проходящий не через a (см. рисунок), что противоречит предположению, что a – точка сочленения.
Конец доказательства.
№17 слайд![Следующая идея Этой теореме](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img16.jpg)
Содержание слайда: Следующая идея
Этой теореме нужно придать такую форму,
в которой она может быть использована
как критерий для нахождения точек сочленения при поиске в глубину
№18 слайд![Для каждой вершины vV](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img17.jpg)
Содержание слайда: Для каждой вершины vV определим множество P(v)
Для каждой вершины vV определим множество P(v)
P(v) = {v} U { w : (w = предок(v)) &
( xV: ((x = v) (x=потомок(v ))) & (<x,w>B))},
где B - множество обратных ребер (хорд).
Иными словами P (v) состоит из v и всех предков v, которых можно достичь из v , проходя сначала несколько (возможно, ни одной) дуг дерева T, а затем одно обратное ребро.
Введем функцию Low(v) = Min { NumVert(x) x P (v) }.
№19 слайд![Low s NumVert a Low s NumVert](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img18.jpg)
Содержание слайда: Low(s) NumVert(a)
Low(s) NumVert(a)
Иными словами - если обратных ребер, которые ведут от потомков некоторого сына в вершины, ранее посещенные при DFS, не существует, то это и есть точка сочленения.
№20 слайд![Опять тот же Пример](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img19.jpg)
Содержание слайда: Опять тот же «Пример 1»
№21 слайд![Нахождение компонент](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img20.jpg)
Содержание слайда: Нахождение компонент двусвязности графа (BiConnection)
(на основе поиска в глубину)
BICON (vert v, vert u)
{ // посещаем вершину v и т.д.; u=Отец(v)
global int numVert [n];
listVert Adj [n] ; // списки смежности
int iV; /*текущий порядковый номер посещения вершины*/
int Low [n] ;
stack<E> st; //стек для записи ребер
№22 слайд![Тело процедуры BICON iV](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img21.jpg)
Содержание слайда: Тело процедуры BICON
iV++;
//посетить v:
numVert[v] = iV;
Low[v] = numVert[v];
for ( w Adj[v] )
if (NumVert[w]==0) {
// <v,w> - ребро (ветвь) остовного дерева:
…
№23 слайд![Продолжение тело основного](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img22.jpg)
Содержание слайда: Продолжение (тело основного цикла)
if (NumVert[w]==0) {//<v,w> - ребро (ветвь) остовного дерева
st {v,w};
BICON ( w, v);
Low[v] := min (Low[v],Low[w]); //здесь Low[w] окончательное
if (Low[w] >= NumVert[v] ) {
/* v - либо корень, либо точка сочленения, а в стеке
сверху до <v,w> включительно - ребра компоненты
двувязности; выписать (зафиксировать) их */
do {
e st;
cout << e;
} while (e == {v,w});
cout << 'end of Block‘ << endl;
} //if
} //if-then
№24 слайд![else w - уже посещалась else](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img23.jpg)
Содержание слайда: else // w - уже посещалась
else // w - уже посещалась
if ((NumVert[w] < NumVert[v]) && (w!=u) ) {
//<v,w>-обратное ребро (хорда), включаем в стек
st {v,w};
Low[v] = min ( Low[v], numVert[w] );
}//if
//od for, v - использована
} //BICON
№25 слайд![SetVert V множество вершин](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img24.jpg)
Содержание слайда: { …
{ …
SetVert V; //множество вершин графа G=(V,E), Card(V)=n
int numVert [n] ;
listVert adj[n]; //списки смежности
int iV; //текущий порядковый номер посещения вершины
int Low[n];
stack <E> st; //стек для записи ребер
for (vV) numVert[v] = 0;
// - пометить все вершины как необследованные
iV = 0;
Empty(St);
for ( vV)
if (numVert[v]==0) BICON (v, v);
}
№26 слайд![Пример](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img25.jpg)
Содержание слайда: Пример 1
№27 слайд![Пример продолжение](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img26.jpg)
Содержание слайда: Пример (продолжение)
№28 слайд![Процесс обхода](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img27.jpg)
Содержание слайда: Процесс обхода
№29 слайд![Другие примеры для](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img28.jpg)
Содержание слайда: Другие примеры
(для самостоятельного разбора!)
Пример 1: начать с вершины, которая есть точка сочленения
№30 слайд![Продолжение лекции в](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img29.jpg)
Содержание слайда: Продолжение лекции в следующей презентации:
№31 слайд![КОНЕЦ ЛЕКЦИИ КОНЕЦ ЛЕКЦИИ](/documents_5/70e4d8195d08fff6f4f25c726c2b00ba/img30.jpg)
Содержание слайда: КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ