Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 06 24 марта / Лекция 6 МОД.ppt
Скачиваний:
36
Добавлен:
09.02.2015
Размер:
1.32 Mб
Скачать

Алгоритм Ярника-Прима-Дейкстры

{Детализация фрагмента ф1:} min := + ;

for x (V \ Vt) do

if D [x,Near[x]] < min then begin

min := D [x,Near[x]] ; v := x

end;

{Можно наряду с Near[*] использовать рабочий массив расстояний Dist[x] = D [x,Near[x]] }

24.03.2014

Алгоритмы на графах:

21

 

построение МОД

 

b

20

c

Алгоритм Ярника-Прима-Дейкстры

 

 

 

23

1

4

15

 

Начальная вершина g

g

 

36

a 9

 

d

 

 

26

25

16

3

 

W(T) = 23+1+4+9+3+17 = 57

 

 

 

 

f e

17

a

g

a

b

a

 

a

 

a

 

a

b

g

b

 

b

 

b

 

b

 

b

c

 

c

b

c

a

c

 

c

 

c

d

 

d

 

d

a

d

a

d

 

d

e

e

e

a

e

a

e

d

e

f

g

f

g

f

a

f

a

f

a

f e

24.03.2014

Алгоритмы на графах:

22

 

построение МОД

 

4. Нижняя граница задачи нахождения МОД

Худший случай: полный граф m = n(n 1)/2. Алгоритм ЯПД – асимптотически оптимальный.

Действительно, симметричная матрица весов содержит n(n1)/2 элементов. В том числе и вес минимального ребра.

Сопоставим задачу МОД с задачей нахождения минимума из n(n 1)/2 элементов, которая решается за n(n 1)/2 шагов и не менее.

Пусть для заданной матрицы решили задачу МОД.

Из остовного дерева, содержащего (n 1) ребро, за (n 1) шаг извлекаем минимальный элемент матрицы.

Если задача МОД решается за менее, чем n(n 1)/2 (n 1) шагов, то и задачу нахождения минимума из n(n 1)/2 элементов можно решить за менее, чем n(n 1)/2 шагов, что неверно.

Итак, нижняя граница задачи МОД: O(n2).

24.03.2014

Алгоритмы на графах:

23

 

построение МОД

 

Реализация алгоритма Ярника-Прима-Дейкстры для разреженных графов

Пусть наряду с Near[*] используется рабочий массив расстояний Dist[x] = D [x,Near[x]]. Реализуем из данных (x, Near[x], Dist[x]) очередь с приоритетами по ключу Dist[x].

Минимальный элемент извлекается (с восстановлением пирамиды) за O (log n) действий.

При помещении вершины v в остовное дерево производим коррекцию данных о вершинах, смежных с v и находящихся в очереди. Коррекция каждой такой вершины x (ребра {v, x}) требует O (log n) действий, но при этом такое ребро «возникает» и «исчезает» лишь один раз за все время. Т.о. суммарно требуется O ((n+m) log n) операций, или, что то же O (m log n).

Ср. с O (n2) (например, при m =O (n))

24.03.2014

Алгоритмы на графах:

25

 

построение МОД

 

Алгоритм Ярника-Прима-Дейкстры построения МОД

Примеры выполнения. Варианты:

Стандартный - для «плотных» графов (m

=O(n))

Для разреженных графов (m = O(n))

24.03.2014

Алгоритмы на графах:

26

 

построение МОД

 

Пример 1. МОД. Алгоритм ЯПД (n = 9; m = 20)

b17

16

3

 

 

4

i1

8

11 9

h7

*

a

0 шаг

-

1 шаг

-

2 шаг

-

24.03.2014

 

c

2

a

10

g

 

14 d

b

17

c

14 d

20

15

 

3

20

15

 

19

16

2

19

 

 

 

 

 

4

 

13

5

12

6

b c

4 2

4 2

4 !-

e

 

i

 

1

 

a

 

 

 

 

18

8

 

 

10

 

 

 

11

9

 

 

 

 

 

 

f

h

 

7

 

g

 

d

e

f

g

15

13

 

12

10

15

13

 

12

9

14

13

 

12

9

13

5

12

6

h

11

8

8

e

18

f

i

1 !-

-

Алгоритмы на графах: Упрощенное представление 27 построение МОД

Пример 1. МОД.

b

17

c

14

16

 

3

20

15

 

2

 

 

 

 

 

 

4

 

i

 

1

a

13

8

 

 

10

5

11

9

12

 

 

h 7 g 6

Алгоритм ЯПД (n = 9; m = 20) 2

d

 

19

После двух шагов

 

 

e

Текущее МОД: {a, i, c}

 

18

После четырех шагов

f

Текущее МОД: {a, i, c, b, h}

2 шаг 3 шаг 4 шаг

a

b

c

d

e

f

g

h

i

-

4

!-

14

13

12

9

8

-

-

!-

-

14

13

12

9

8

-

-

-

-

14

13

12

7 (7)

!-

-

24.03.2014

Алгоритмы на графах:

28

 

построение МОД

 

Пример 1. МОД. Алгоритм ЯПД (n = 9; m = 20) 3

b

17

c

 

14

 

d

 

 

20 15

После четырех шагов

16

 

 

3

2

 

 

19

 

 

 

 

 

 

 

 

Текущее МОД: {a, i, c, b, h}

 

 

 

 

4

 

 

 

 

 

 

 

i

1

a

 

13

 

e

 

 

 

 

 

 

 

 

 

 

 

8

 

11

9

10

 

5

 

 

18

После шести шагов

 

 

 

 

 

12

 

 

 

h

7

 

g

 

6

 

f

Текущее МОД: {a, i, c, b, h, g, e}

4 шаг 5 шаг 6 шаг

a

b

c

d

e

f

g

h

i

-

-

-

14

13

12

7

!-

-

-

-

-

14

5 (5)

6

!-

-

-

-

-

-

14

!-

6

-

-

-

24.03.2014

Алгоритмы на графах:

29

 

построение МОД

 

Пример 1. МОД. Алгоритм ЯПД (n = 9; m = 20) 4

b17

16

3

 

 

4

i1

8

11 9

h7

a

c

2

a

10

g

14

20 15

13

5

12

6

b c

d

19

e

18

f

После шести шагов

Текущее МОД: {a, i, c, b, h, g, e}

После восьми шагов Результат - МОД:

{a, i, c, b, h, g, e, f,

d}

W = 1+2+4+8+7+5+6+14 = 47

d

e

f

g

h

i

6 шаг 7 шаг 8 шаг

-

-

-

14

!-

6

-

-

-

-

-

-

14

-

!-

-

-

-

-

-

-

!-

-

-

-

-

-

24.03.2014

Алгоритмы на графах:

30

 

построение МОД

 

Пример выполнения алгоритма Ярника-Прима-Дейкстры

– вариант для разреженных графов

См. слайд 25

24.03.2014

Алгоритмы на графах:

31

 

построение МОД

 

Пример 2. МОД. Алгоритм ЯПД (n = 9; m = 20) 1

b

17

c

14

d

(x, Near[x], Dist[x])

Dist[x] = D [x,Near[x]].

 

 

 

 

16

 

3

20

15

19

 

(x, Dist[x])

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

(b,4)

 

 

i

1

 

a

 

e

 

 

 

 

13

 

(c,2)

(d,15)

 

 

 

 

 

5

 

 

 

8

 

 

10

18

 

 

 

 

11

9

12

(e,13)

(f,12)

(g,10)

(h,11)

 

 

h

7

 

g

6

f

(i,1)

 

 

 

 

(b,4)

 

(c,2)

 

(d,15)

(e,13)

 

(f,12)

 

(g,10)

 

(h,11)

 

(i,1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

b

 

c

 

d

e

 

f

 

g

 

h

 

i

0 шаг -

4

2

15

13

12

10

11

1

24.03.2014

Алгоритмы на графах:

32

 

построение МОД

 

Пример 2. МОД. Алгоритм ЯПД (n = 9; m = 20) 2

b 17 c

16

3

2

 

 

4

i 1 a

8 10

11 9

h 7 g

14

20 15

13

5

12

6

(c,2)

d

19

e

18

f

Шаг 1 ТМОД = {a, i}

 

 

(i,1)

 

 

(c,2)

 

(g,10)

(b,4)

(f,12)

(d,15)

(h,11)

(e,13)

(c,2)

 

 

(b,4)

 

 

 

(g,9)

 

 

 

 

 

(b,4)

 

 

 

 

(h,8)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(e,13)

 

(f,12)

 

(d,15)

 

 

(h,8)

 

(e,13)

 

(f,12)

 

(d,15)

 

 

 

(g,9)

24.03.2014

Алгоритмы на графах:

33

 

построение МОД

 

Пример 2. МОД. Алгоритм ЯПД (n = 9; m = 20) 3

b 17 c

16

3

2

 

 

4

i 1 a

8 10

11 9

h 7 g

14

20 15

13

5

12

6

(b,4)

d

Шаг 2

ТМОД = {a, i, c}

 

 

 

 

 

19

 

 

 

 

e

 

 

(c,2)

 

 

(b,4)

(h,8)

 

 

 

 

18

(e,13)

(f,12)

(d,15)

(g,9)

 

f

 

 

(g,9)

 

 

 

(h,8)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(e,13)

 

(f,12)

 

(d,14)

 

24.03.2014

Алгоритмы на графах:

34

 

построение МОД

 

Пример 2. МОД. Алгоритм ЯПД (n = 9; m = 20) 4

b

17

c

14

d

Шаг 3

ТМОД = {a, i, c, b}

 

 

 

16

 

3

20

15

19

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

(b,4)

i

 

1

a

13

e

 

 

 

 

 

 

8

 

 

10

5

18

 

(g,9)

(h,8)

 

9

12

 

 

 

11

 

(e,13)

(f,12)

(d,14)

 

 

 

 

 

 

h

7

g

6

f

 

 

 

 

 

 

(h,8)

 

 

 

 

 

 

(g,9)

 

 

(d,14)

 

 

 

(e,13)

 

(f,12)

 

 

 

 

 

24.03.2014

Алгоритмы на графах:

35

 

построение МОД

 

Пример 2. МОД. Алгоритм ЯПД (n = 9; m = 20) 5

b

17

c

14

d

Шаг 4

 

ТМОД = {a, i, c, b, h}

 

 

 

16

 

3

20

15

19

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

(h,8)

i

1

 

a

 

e

 

 

 

13

 

(g,9)

(d,14)

 

 

 

 

5

 

 

8

 

 

10

18

 

 

 

11

9

12

(e,13)

(f,12)

 

 

h

7

 

g

6

f

 

 

 

 

 

 

(g,7)

 

 

 

 

(f,12) (d,14)

(e,13)

24.03.2014

Алгоритмы на графах:

36

 

построение МОД

 

Пример 2. МОД. Алгоритм ЯПД (n = 9; m = 20) 6

b 17 c

16

3

2

 

 

4

i 1 a

8 10

11 9

h 7 g

14

20 15

13

5

12

6

(f,6)

d

19

e

18

f

(e,5)

 

(d,14)

 

 

 

Шаг 5 ТМОД = {a, i, c, b, h, g}

(g,7)

(f,12) (d,14)

(e,13)

(e,5)

(f,6)

 

(d,14)

 

 

 

24.03.2014

Алгоритмы на графах:

37

 

построение МОД

 

Пример 2. МОД. Алгоритм ЯПД (n = 9; m = 20) 7

b 17 c

16

3

2

 

 

4

i 1 a

8 10

11 9

h 7 g

 

14

d

Шаг 6

ТМОД = {a, i, c, b, h, g, e}

 

 

 

20

15

19

 

 

 

13

e

 

(e,5)

 

 

 

 

5

18

(f,6)

(d,14)

 

12

 

 

 

6

f

 

 

(f,6)

(d,14)

24.03.2014

Алгоритмы на графах:

38

 

построение МОД

 

Пример 2. МОД. Алгоритм ЯПД (n = 9; m = 20) 8

b

17

c

 

14

 

d

 

Шаг 7

 

 

 

ТМОД = {a, i, c, b, h, g, e}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

20

15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

16

 

 

2

 

19

 

 

 

 

 

 

 

 

 

 

(f,6)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

1

a

 

13

 

e

 

 

 

 

 

(d,14)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

10

 

 

5

 

 

18

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(d,14)

 

 

 

 

 

 

11

9

 

 

12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h

7

 

g

 

6

 

f

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шаг 8

 

 

 

 

ТМОД = {a, i, c, b, h, g, e, f, d}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

24.03.2014

Алгоритмы на графах:

39

 

построение МОД