Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции по моделям_испр.doc
Скачиваний:
11
Добавлен:
22.08.2019
Размер:
924.67 Кб
Скачать

Определение кратчайшего расстояния для сетей с циклами

Сети содержат циклы, возникающие из-за возможности двустороннего движения; если дуга ориентирована (движение одностороннее), то расстояние в другом направлении полагается равным бесконечности.

Пусть требуется определить кратчайший маршрут между вершиной 1 и любым другим узлом сети. Расстояния dij запишем в виде таблицы, строки и столбцы которой представляют узлы.

1

2

3

4

Ui

1

15

11

0

2

3

4

1

15 (12)

3

8

1

5

11

4

3

16 (13)

Vj

0

15(12)

11

16(13)

  1. Пусть Vj – сумма длин дуг из узла 1 в узел j. Vj = min {Ui + dij} , где Ui – расстояние до узла i i

V1=0 U1=V1=0 Ui=Vj, если i=j

  1. Предположим i=1. Найти Vj – Ui для всех j.

Если dij ≥ Vj – Ui для всех j, то между узлами i и j не существует более короткого пути. i = i + 1, вычисления повторить.

Если dij < Vj – Ui , то вычислить новое значение V’j = Ui +dij .

Vj заменяется на V’j и берется следующий узел, i = i + 1.

Если значение Vj изменилось, то повторить шаг 2, используя измененные значения.

3. Полученные значения Vj определяют кратчайшее расстояние между узлами 1 и любым из узлов j. Для получения соответствующих цепей, найти столбец n, соответствующий узлу, до которого ищется кратчайшее расстояние. Найти строку i, для которой выполняется равенство Vn=Ui+din .Этот узел предшествует узлу n. Рассмотреть столбец I и для него найти соответствующую строку, т.е. предшествующий узел и т.д., пока не дойдем до 1 узла.

  1. U1 = V1 = 0

V2 = min {U1 + d12} = 15 ; U2 = 15

V3 = min {U1 + d13 ; U2 + d23 } = min {11;19} = 11 ; U3 = 11

i=1,2

V4 = min {U2 + d24 ; U3 + d34 } = min {16;16} = 16 ; U4 = 16

i=2,3

2) j=1 j=3 j=3 j=4

i = 1

1

2

3

4

Vj – U1

*

15

11

*

d1j

*

15

11

*

Vj-U1<=d1j - пересчитывать расстояния не требуется

i = 2

1

2

3

4

Vj – U2

- 15

*

- 4

1

d2j

3

*

4

1

Vj-U2<=d2j - пересчитывать расстояния не требуется

i = 3

1

2

3

4

Vj – Ui

- 11

4

*

5

d3j

8

1

*

5

V2-U3>d32 – расстояние до 2 узла пересчитываем: Vj’=Ui+dij, т.е. V2’=U3+d32=11+1=12, U2’=12

i = 4

1

2

3

4

Vj – Ui

*

- 4

- 5

*

d4j

*

3

*

Так как вычислялось новое значение V’j, то нужно заново пересчитать шаг 2.

Предположим, что шаг 2 пересчитан и пересчитано новое значение V4’.

Найдем цепь, соединяющую узлы 1 и 4, т.е. n=4. Начинаем с последнего узла. Ему соответствует столбец 4. Для него должно выполняться равенство:

Vn = din + Ui. V4=Ui+di4 – равенство выполняется для строки 2, переходим к узлу 2 и соответственно к столбцу 2.

Ст. 4 : 13 = d24 + U2. ; i = 2

Ст. 2 : 12 = d32 + U3. ; i = 3

Ст. 3 : 11 = d13 + U1. ; i = 1

Итак, искомая цепь с кратчайшим маршрутом 4 ← 2 ← 3 ← 1

Рассмотрим еще один пример:

i \ j

1

2

3

4

5

6

7

Ui

1

2

8

11

9

4

2

4

3

5

1

0

3

1

4

2

3

4

5

9

2

23

15(6)

5

2

7

9

5 (2)

6

8

3

5

1

10

1

7

10

4

2

11

Vj

4

0

3

15(6)

5 (2)

1

11

1)

U2 = V2 = 0;

V1 = U2 + d21 = 0 + 4 = 4 = U1

V3 = min {U1 + d13 ; U2 + d23} = 3 = U3

V4 = min {U1 + d14} = 15 = U4

V5 = min {U1 + d15 ; U2 + d25 } = 5 = U5

V6 = min {U2 + d26 ; U3 + d36 ; U4 + d46 ; U5 + d56 } = {1;5;17;12} = 1 = U6

V7 = min {U4 + d47 ; U5 + d57 ; U6 + d67 } = {38;14;11} = 11 = U7

2)

i = 1

1

2

3

4

5

6

7

Vj – Ui

*

- 4

- 1

11

1

*

*

d1j

*

2

8

11

9

*

*

i = 2

1

2

3

4

5

6

7

Vj – Ui

4

*

3

*

5

1

*

d2j

4

*

3

*

5

1

*

i = 3

1

2

3

4

5

6

7

Vj – Ui

1

- 3

*

12

*

- 2

*

d3j

1

4

*

*

2

*

i = 4

1

2

3

4

5

6

7

Vj – Ui

- 11

*

- 12

*

*

- 14

- 4

d4j

5

*

8

*

*

2

23

i = 5

1

2

3

4

5

6

7

Vj – Ui

- 1

- 5

*

*

*

- 4

6

d5j

2

*

*

*

7

9

i = 6

1

2

3

4

5

6

7

Vj – Ui

*

- 1

2

14

4

*

10

d6j

*

8

3

5

1

*

10

i = 7

1

2

3

4

5

6

7

Vj – Ui

*

*

*

- 5

- 9

- 10

*

d7j

*

*

*

10

4

2

*

V’j = dij + Ui. или

V’4 = d64 + U6 = 1 + 5 = 6

V’5 = d65 + U6 = 1 + 1 = 2

И еще шаг …

3)

7 ← 5 ← 6 ← 2 11

7 ← 6 ← 2 11

6 ← 2 2

5 ← 6 ← 2 2

4 ← 6 ← 2 6

3 ← 2 3

1← 2 4

1← 3 ← 2 4

1 ← 5 ← 6 ← 2 4