Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебные материалы ИКНТ 1-8 семестры / 7 семестр / Козлов, Кисоржевский_Теория информационных систем (2008).pdf
Скачиваний:
307
Добавлен:
21.03.2016
Размер:
3.79 Mб
Скачать

ЧАСТЬ 4. АНАЛИЗ, СИНТЕЗ И ОПТИМИЗАЦИЯ

2008 год

 

 

- ёмкости путей не могут принимать отрицательных значений, т.е. f i 0 для всех μi Μ ;

- суммарная ёмкость путей между произвольной парой (k, l) узлов должна быть равна числу каналов Υkl , которые обеспечат требуемое качество обслуживания;

- для любой ветви bxy суммарная ёмкость всех путей, содержащих

эту ветвь, не может быть больше ёмкости ветви, т.е. f i bxy .

μi bxy

Одним из наиболее эффективных методов решения задач линейного программирования является симплекс – метод, изучаемый в курсах математики. Однако классическое решение при многочисленных исходных данных требует очень большого объёма машинного времени. Поиски методов ускорения процесса решения привели к трём стандартным алгоритмам. Все они основаны на очевидном утверждении, что если кратчайший путь от узла i к узлу N проходит через промежу-

точные узлы y1 , y2 ,..., yk , то кратчайшие пути от узлов yk к узлу N яв-

ляются частями этого кратчайшего пути μiN .

Существуют три стандартных алгоритма решения задач отыскания кратчайшего пути: алгоритм Беллмана-Форда, алгоритм Дийкстра и алгоритм Флойда-Уоршела. Первые два алгоритма находят кратчайшие пути от данного узла-источника ко всем другим узлам (или, эквивалентно, от всех узлов к данному узлуадресату), а третий алгоритм находит кратчайшие пути от всех узлов ко всем другим узлам.

Алгоритм Беллмана-Форда

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

~ 417 ~

2008 год

ЧАСТЬ 4. АНАЛИЗ, СИНТЕЗ И ОПТИМИЗАЦИЯ

 

Основная идея алгоритма Беллмана-Форда состоит в том, чтобы сначала найти длины кратчайших путей при условии, что пути содержат не более одной дуги, затем длины кратчайших путей при условии, что пути содержат не более двух дуг и т.д. Кратчайший путь при условии, что путь содержит не более h дуг(ветвей), будет называться кратчайшим (≤ h) путём.

Пусть Di(h) - длина кратчайшего (≤ h) пути от узла 1 до узла i.Будем считать, что Di(h) =0 для всех h, а dij = ∞, если отсутствует дуга

(i,j).

Алгоритм Беллмана-Форда состоит в следующем.

Вначале Di(0) = ∞ для всех i≠1.

При каждом последующем h≥0

(h+1)

 

(h)

+ dij ] для всех i≠1.

 

Di

= mi n[Dj

 

 

 

j

 

 

 

 

Рис. 23.5 иллюстрирует работу алгоритма

 

1

 

8

 

 

Узел-

1

2

4

2

Длины дуг указаны цифра-

ми.

 

 

 

 

 

источник 4

 

 

2

 

 

~ 418 ~

ЧАСТЬ 4. АНАЛИЗ, СИНТЕЗ И ОПТИМИЗАЦИЯ

2008 год

 

 

 

D(1)2

= 1

D(1)4

= ∞

 

 

 

 

Кратчайшие пути,

D(1)

= 0

 

 

использующие не более одной

1

 

 

 

 

 

 

 

 

дуги.

 

D3(1) = 4

D5(1)

= ∞

 

D(2)2

= 1

D(2)4 = 9

D(2)

= 1

 

 

Кратчайшие пути,

1

 

 

 

 

 

 

 

 

использующие не более двух

дуг.

 

 

 

 

 

D(2)2 = 2

D5(2) = 6

 

D(3)2

= 1

D(3)4 = 9

 

 

 

 

Кратчайшие пути,

 

D(3) = 0

 

использующие не более трёх

 

1

 

 

 

дуг.

 

 

 

 

 

D3(3) = 2

D5(3) = 4

 

 

D(4)2 = 1

 

D(4)4 = 8

 

D(4) = 0

 

Итоговое дерево

 

 

1

 

 

 

 

 

 

кратчайших путей.

 

D3(4) = 2

D5(4)

= 4

 

Рис.23.5

 

 

 

 

 

~ 419 ~

2008 год

ЧАСТЬ 4. АНАЛИЗ, СИНТЕЗ И ОПТИМИЗАЦИЯ

 

Число операций алгоритма в худшем случае равно N-1, каждая операция должна быть проведена для N-1 узла, а для каждого узла минимизация осуществляется самое большее по N-1 переменной.Таким образом, в худшем случае объём вычислений записывается в виде

0( Ν3 ), где N – число узлов в сети.

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

Этот алгоритм требует, чтобы длины всех путей были положительны (это выполняется в сетях передачи данных).Объём вычислений, в худшем случае, для этого алгоритма значительно меньше, чем у алгоритма Беллмана-Форда. Основная идея алгоритма состоит в том, чтобы отыскивать кратчайшие пути в порядке возрастания длины пути. Кратчайшим из всех кратчайших путей от узла 1 является путь, состоящий из одной дуги, соединяющей узел 1 с ближайшим соседним узлом.Следующим кратчайшим среди кратчайших путей должен быть либо путь из одной дуги к следующему ближайшему соседу узла 1, либо кратчайший путь из двух дуг, проходящий через узел, выбранный на первом шаге, и т.д.Для формального описания алгоритма каждый узел i имеет метку Di ,

означающую оценку длины кратчайшего пути от узла 1.Когда оценка становиться неизменной, считается, что узел окончательно помечен. Множество окончательно помеченных узлов обозначим через P.Узел, который будет добавлен на очередном шаге к P, является ближайшим к узлу 1 среди всех узлов,ещё не вошедших в P, так как кратчайшее расстояние получается минимизацией по j P величины

mini P{Di + lij}.Вычислительная сложность алгоритма будет порядка

0( N2 ).

Рис.23.6 иллюстрирует работу алгоритма Дийкстра, а также алгоритма Беллмана-Форда.

~ 420 ~