Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по программированию / 18 Кратчайшие пути и топсорт.pptx
Скачиваний:
77
Добавлен:
06.06.2015
Размер:
1.08 Mб
Скачать

Техника релаксации

Для каждого ребра (u,v) храним d[v] – верхнюю оценку кратчайшего пути из s в v.

Initialize (G,s){

for (для v V) { d[v]

Π[v] NULL;

}

d[s] 0;

}

Релаксация ребра (u,v):

значение d[v] уменьшается до d[v+w(u,v)]

(если второе второе значение меньше первого)

Relax (u, v, w) {

If (d[v] > d[u] +w(u,v)){ d[v] = d[ u] +w(u,v);

Π[v] u;

}

}

Релаксация ребра при поиске кратчайших путей.

 

 

2

 

1

1

 

3

 

4

Пусть уже найдены оценки

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

кратчайших путей для вершин,

 

 

2

4

 

5

 

 

3

соединенных красным ребром.

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d[8] = 6;

10

3

3

 

5

8

 

 

1

9

 

 

 

 

 

 

 

 

 

d[7] = 9

 

 

 

 

 

 

 

 

 

 

 

5

1

4

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

4

7

 

 

 

 

 

 

 

 

 

89

 

 

 

 

Релаксация ребра (u, v):

if (d[u] + w(u,v) < d[v]) d[v] = d[u] + w(u,v);

Релаксация ребра (7, 8):

9 + 2 > 6

Релаксация ребра (8, 7):

6 + 2 < 9 d[7] = 8

Алгоритм Дейкстры

Dijkstra(G,w,s){

 

Initialize(G,s);

 

S

ø;

 

Q

V;

//очередь с приоритетами

While (Q ≠ ø){

u Exstract_min(Q); //выбрать ближайшую S S U {u};

for (для v Adj[u])

Relax ( u, v, w);

}

}

Пример.

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

 

 

2

 

2

1

 

 

3

 

4

 

6

 

 

 

 

 

 

 

 

3

1

 

 

 

 

1

 

 

 

4

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

1

3

 

5

8

 

 

 

3

9

 

 

 

 

 

 

 

3

1

1

 

 

1

 

 

 

 

 

 

 

 

 

 

4

6 7

n

1

2

3

4

5

6

7

8

9

10

π

2

5

10

8

6

3

6

2

8

 

d

6

4

1

8

3

2

6

7

10

0

Очередь

3

5

2

7

1

8

4

9

Реализация с дополнительным массивом -

O(n2)

Массив D[v] содержит стоимость текущего

кратчайшего пути из s в v.

2

 

1

 

3

Пример

0

 

7

 

 

10

6

 

2

 

4

 

 

 

 

 

 

 

 

 

 

4

 

 

5

 

 

 

 

 

 

 

3

S u D[u] D[1] D[2] D[3] D[4]

0

{0}

-

- 2

+∞ +∞ 10

1

{0, 1}

1

2 2

5

+∞ 9

 

2

{0, 1, 2}

 

2 5

2

5 9 9

 

3

{0, 1, 2, 3}

3 9

2

5 9 9

 

4

{0, 1, 2, 3, 4}

4

9 2 5

9 9

Компьютерная сеть была названа ARPANET, все работы

финансировались

за счёт Министерства обороны США. Затем сеть ARPANET

начала активно

расти и развиваться, её начали использовать учёные из

разных областей

науки. В 1973 году к сети были подключены первые иностранные

организации из Великобритании и Норвегии, сеть стала

международной.

Стоимость пересылки электронного письма по сети ARPANET составляла

50 центов.

В 1984 году у сети ARPANET появился серьёзный соперник,

Национальный фонд науки США (NSF) основал обширную

Межуниверситетскую сеть NSFNet, которая имела

гораздо боЭльшую

пропускную способность (56 кбит/с), нежели ARPANET.

В 1990 году сеть ARPANET прекратила своё

существование, полностью

Кратчайшие пути в ориентированном графе

1.Если в ориентированном графе нет дуг с отрицательным весом, то алгоритм Дейкстры работает точно так же, как и в случае неориентированных графов.

2.Если в ориентированном графе нет циклов с отрицательным весом, то можно применить алгоритм Беллмана – Форда.

2

1

 

2 3 -3

2

4

-2

5

 

1

3

7 2

2

2

9

-1 3

2

3

2

2 6

 

-1

4

2

 

8

-1

n

1

2

3

4

5

6

7

8

9

π

3

4

8

 

4

8

5

9

7

d

1

2

2

0 -2 -1 -1 0

1

И так далее… В конце концов получится…

Floyd-Warshall(M, n) { D(0) M;

for k 1 to n do for i 1 to n do

for j 1 to n do

dij(k) min(dij(k-1), dik(k-1) + dkj(k-1) );

return D(n);

}