Поиск в глубину в ориентированных графах Топологическая сортировка

Содержание

Слайд 2

21.04.2014 ПВГ в орграфе Особенности поиска в глубину (ПВГ) в ориентированных графах

21.04.2014

ПВГ в орграфе

Особенности поиска в глубину (ПВГ) в ориентированных графах

Слайд 3

21.04.2014 ПВГ в орграфе Пример ПВГ в орграфе 1 2 3

21.04.2014

ПВГ в орграфе

Пример ПВГ в орграфе

1

2

3

4

(1)

5

6

7

(2)

(3)

(4)

(5)

(6)

(7)

8

9

10

(8)

(9)

(10)

Стоп!

Слайд 4

21.04.2014 ПВГ в орграфе Пример ПВГ в орграфе 1 2 3

21.04.2014

ПВГ в орграфе

Пример ПВГ в орграфе

1

2

3

4

(1)

5

6

7

(2)

(3)

(4)

(5)

(6)

(7)

8

9

10

(8)

(9)

(10)

Стоп!

Древесное ребро – от отца к

сыну в глубинном остовном дереве (ГОД)
Направленное вперед (прямое) ребро – от предка к потомку в ГОД
Обратное ребро – от потомка к предку в ГОД
Поперечное ребро – не связывает предка и потомка

1 – номер при ПВГ: NumVert(v) или n(v)
(1) – номер в порядке использования при ПВГ: fn(v) [finishing]

Слайд 5

21.04.2014 ПВГ в орграфе 1 2 3 4 (1) 5 6

21.04.2014

ПВГ в орграфе

1

2

3

4

(1)

5

6

7

(2)

(3)

(4)

(5)

(6)

(7)

8

9

10

(8)

(9)

(10)

1

2

3

4

5

6

7

(1)

(5)

(4)

(3)

(2)

(6)

(7)

8

9

10

(8)

(9)

(10)

Слайд 6

21.04.2014 ПВГ в орграфе 1 2 3 4 5 6 7

21.04.2014

ПВГ в орграфе

1

2

3

4

5

6

7

(1)

(5)

(4)

(3)

(2)

(6)

(7)

8

9

10

(8)

(9)

(10)

Направленное вперед ребро(u,v): n(u)в момент рассмотрения n(v)≠0

Древесное ребро (u,v):

n(u)в момент рассмотрения n(v)=0

Обратное ребро (u, v): n(u)>n(v) и fn(v)=0
Поперечное ребро (u, v): n(u)>n(v) и fn(v)≠0

Слайд 7

21.04.2014 ПВГ в орграфе Топологическая сортировка Ациклический (бесконтурный) орграф Лемма 1.

21.04.2014

ПВГ в орграфе

Топологическая сортировка

Ациклический (бесконтурный) орграф
Лемма 1. Орграф G является ациклическим

ттогда, когда поиск в глубину в G не находит обратных ребер.
Лемма 2. В произвольном ациклическом орграфе G=(V,E) вершины могут быть пронумерованы так, что каждая дуга будет иметь вид (vi,vj), где iПримеры:
Сетевой график работ.
Связи между дисциплинами учебного плана (пререквизиты и постреквизиты).
Информационный граф программы (алгоритма).
Слайд 8

21.04.2014 ПВГ в орграфе Пример 0 1 (1) 4(2) 3(3) 2(4)

21.04.2014

ПВГ в орграфе

Пример 0

1 (1)

4(2)

3(3)

2(4)

5(5)

1

2

3

4

5

2

1

3

4

5

(пере)нумерация
(vi,vj) ⇒ i

(пере)группировка
Все стрелки слева направо

Исходная нумерация

Нумерация

ПВГ
Слайд 9

21.04.2014 ПВГ в орграфе Продолжение примера 0 (ПВГ) 1 5 2

21.04.2014

ПВГ в орграфе

Продолжение примера 0 (ПВГ)

1

5

2

4

3

1

2

3

4

5

1

2

3

4

5

ПВГ (поиск в глубину)
1- номер в

порядке посещения
4 – номер в порядке использования

1

2

3

4

5

5

4

3

2

1

Если начать с красной вершины

Слайд 10

21.04.2014 ПВГ в орграфе Продолжение примера 0 (ПВГ) v [*] –

21.04.2014

ПВГ в орграфе

Продолжение примера 0 (ПВГ)

v [*] – имена вершин в

исходной нумерации;
nv [*] - номера в порядке посещения;
fn [*] - номера в порядке использования;
sn [*] – номера в порядке топ.сортировки, т.е. sn [i] – новый номер вершины с исходным номером i; (перенумерация!)
tn [i] – исходный номер вершины с номером i в порядке топ.сортировки (перегруппировка!)
Слайд 11

21.04.2014 ПВГ в орграфе Продолжение примера 0 (ПВГ) 1) Получение sn

21.04.2014

ПВГ в орграфе

Продолжение примера 0 (ПВГ)

1) Получение sn [*] из fn

[*]:
for (i=1; i<=n; i++) sn [i] = n - fn [i] + 1;
2) Получение tn [*] из sn [*]:
for (i=1; i<=n; i++) tn[sn[i]] = i;
------------------------------------------
Или получение tn [*] сразу из fn [*]:
for (i=1; i<=n; i++) tn[n - fn[i] + 1] = i ;

Оказывается, что
sn [*] и tn [*] –
обратные перестановки
(см. след. слайд)

Слайд 12

21.04.2014 ПВГ в орграфе Перестановки tn [sn [ i ]] =

21.04.2014

ПВГ в орграфе

Перестановки

tn [sn [ i ]] = i , где

i – из исходной нумерации,
sn [tn [ j ]] = j , где j – из нумерации топ.сортировки
Слайд 13

21.04.2014 ПВГ в орграфе Выполнить ПВГ в орграфе G, заполнив массив

21.04.2014

ПВГ в орграфе

Выполнить ПВГ в орграфе G, заполнив массив fn[*].
Пронумеровать вершины

номерами (n - fn[v] + 1), т.е. заполнить sn [*] – вектор (последовательность) новых номеров в порядке топологической сортировки (sn [ i ] – новый номер вершины с исходным номером i).
Перегруппировать вершины, т.е. заполнить tn [*] – вектор старых номеров в новом порядке (tn [ i ] – исходный номер вершины с номером i в порядке топологической сортировки)

Алгоритм топологической сортировки

Слайд 14

21.04.2014 ПВГ в орграфе Алгоритм топологической сортировки Пример 1 1 2

21.04.2014

ПВГ в орграфе

Алгоритм топологической сортировки

Пример 1

1

2

3

4

5

6

7

1

2

3

4

5

6

7

a

b

c

d

e

f

g

Слайд 15

21.04.2014 ПВГ в орграфе Алгоритм топологической сортировки Пример 2 (другие списки

21.04.2014

ПВГ в орграфе

Алгоритм топологической сортировки

Пример 2 (другие списки смежности)

1

7

6

4

1

3

2

3

6

5

4

2

5

7

1

2

3

4

5

6

7

1

2

3

4

5

6

7

Слайд 16

21.04.2014 ПВГ в орграфе Продолжение на следующей лекции! (28 апреля)

21.04.2014

ПВГ в орграфе

Продолжение на следующей лекции! (28 апреля)

Слайд 17

21.04.2014 ПВГ в орграфе Нахождение сильно связных компонент графа (ССК) Алгоритм

21.04.2014

ПВГ в орграфе

Нахождение сильно связных компонент графа (ССК)

Алгоритм на основе поиска

в глубину
Сильная связность (Strongly Connection)
Определение. Орграф G сильносвязный, если любые две его вершины достижимы друг из друга.

Определение. Орграф G односторонне связный, если для любой его пары вершин по меньшей мере одна достижима из другой.

Определение. Орграф G слабо связный, если любые две его вершины соединены полупутём.

Слайд 18

21.04.2014 ПВГ в орграфе Сильно связные компоненты (Strongly Connected Components) Сильно

21.04.2014

ПВГ в орграфе

Сильно связные компоненты (Strongly Connected Components)

Сильно связная компонента –

максимальный сильно связный подграф
Слайд 19

21.04.2014 ПВГ в орграфе 1 2 3 4 (1) 5 6

21.04.2014

ПВГ в орграфе

1

2

3

4

(1)

5

6

7

(2)

(3)

(4)

(5)

(6)

(7)

8

9

10

(8)

(9)

(10)

1

2

3

4

5

6

7

(1)

(5)

(4)

(3)

(2)

(6)

(7)

8

9

10

(8)

(9)

(10)

Каждой ССК графа соответствует дерево в ПВГ-лесу
(более точно далее)

ПОИСК
в

глубину
Слайд 20

21.04.2014 ПВГ в орграфе Соответствие «ССК – дерево» Утверждение Пусть Gi

21.04.2014

ПВГ в орграфе

Соответствие «ССК – дерево»

Утверждение
Пусть Gi =(Vi, Ei) – ССК

орграфа G, а F =(V, T) - глубинный остовный лес для G. Тогда узлы Vi орграфа G вместе с ребрами из Ei ∩T образуют дерево.
Т.о. «ССК ⇒ дерево», но «дерево ⇒ ССК» - не верно (см.пример)
Хорошо бы при ПВГ обнаруживать корни деревьев, соответствующих ССК (!)
Алгоритм Тарьяна (Tarjan R.E.) аналогичен ранее рассмотренному алгоритму нахождение двусвязных компонент.
Мы рассмотрим далее другой алгоритм.
Слайд 21

При стягивании каждой сильно связной компоненты в одну вершину получается ациклический

При стягивании каждой сильно связной компоненты в одну вершину получается ациклический

ориентированный граф.

21.04.2014

ПВГ в орграфе

Слайд 22

21.04.2014 ПВГ в орграфе Обращение орграфа (понадобится далее), ССК – те же (!)

21.04.2014

ПВГ в орграфе

Обращение орграфа (понадобится далее), ССК – те же (!)

Слайд 23

21.04.2014 ПВГ в орграфе Алгоритм Косарайю (S.R.Kosaraju) нахождения ССК орграфа (на

21.04.2014

ПВГ в орграфе

Алгоритм Косарайю (S.R.Kosaraju) нахождения ССК орграфа (на основе двух ПВГ)

Выполнить ПВГ

орграфа G и вычислить номера вершин в порядке их использования fn[*].
Сконструировать новый (обращенный) орграф GR , путем обращения всех дуг исходного графа.
Выполнить ПВГ орграфа GR , начиная с вершины, имеющей наибольший номер fn[ ]. Если ПВГ не завершен, то продолжить, начиная с вершины, имеющей наибольший номер fn[ ] среди оставшихся.
Каждое дерево полученного глубинного остовного дерева орграфа GR является ССК орграфа G.
Слайд 24

21.04.2014 ПВГ в орграфе 1 2 3 4 (1) 5 6

21.04.2014

ПВГ в орграфе

1

2

3

4

(1)

5

6

7

(2)

(3)

(4)

(5)

(6)

(7)

8

9

10

(8)

(9)

(10)

1

2

3

4

5

6

7

(1)

(5)

(4)

(3)

(2)

(6)

(7)

8

9

10

(8)

(9)

(10)

abde

hij

cfg

копия

Слайд 25

21.04.2014 ПВГ в орграфе Обращенный граф (4) (3) (2) (6) (7)

21.04.2014

ПВГ в орграфе

Обращенный граф

(4)

(3)

(2)

(6)

(7)

(10)

(1)

(5)

(8)

(9)

I

II

(10)

(7)

III

(4)

ПВГ в обращенном графе

Слайд 26

21.04.2014 ПВГ в орграфе Основные факты (утверждения), на которые опирается доказательство

21.04.2014

ПВГ в орграфе

Основные факты (утверждения), на которые опирается доказательство правильности алгоритма


Граф ССК GССК орграфа G – ациклический
ССК орграфов G и GR совпадают (как множества вершин)
При втором ПВГ граф ССК (GR)ССК орграфа GR проходится в порядке, обратном топологической сортировке

Слайд 27

21.04.2014 ПВГ в орграфе Пример (пояснение к утверждениям) 5/3 6/2 7/1

21.04.2014

ПВГ в орграфе

Пример (пояснение к утверждениям)

5/3

6/2

7/1

8/6

9/5

10/4

4/8

3/9

2/14

12/13

13/12

1/15

G

ПВГ в G

GССК

Топ. сорт. графа

Слайд 28

21.04.2014 ПВГ в орграфе Пример (продолжение) 13-3 15-2 14-1 10-6 12-5

21.04.2014

ПВГ в орграфе

Пример (продолжение)

13-3

15-2

14-1

10-6

12-5

11-4

9-8

7-9

3-14

2-13

4-12

1-15

GR

ПВГ в GR

(GR)ССК

A→ C → B → E

→ D

Топ. сорт. графа

Слайд 29

21.04.2014 ПВГ в орграфе Сложность алгоритмов нахождения ССК Алгоритм Тарьяна (Tarjan

21.04.2014

ПВГ в орграфе

Сложность алгоритмов нахождения ССК

Алгоритм Тарьяна (Tarjan R.E.)
Алгоритм Косарайю (S.R.Kosaraju)
O(n

+ m)
КОНЕЦ ССК