Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алгоритмы на графах. Поиск маршрутов / Алгоритм Форда-Беллмана

.htm
Скачиваний:
36
Добавлен:
01.05.2014
Размер:
27.15 Кб
Скачать

Алгоритм Форда-Беллмана A { TEXT-DECORATION: none } A:hover { COLOR: #ff6600; TEXT-DECORATION: underline } H2 { FONT-WEIGHT: bold; FONT-SIZE: 14pt; FONT-FAMILY: sans-serif } PRE { FONT-SIZE: 9pt } .source { FONT-SIZE: 9pt; COLOR: #666699 } .l2 { FONT-SIZE: 10pt } .l3 { FONT-SIZE: 9pt }

Path: Математика » Графы и маршруты » Кратчайшие пути » Алгоритм Форда-Беллмана   Алгоритм Форда-Беллмана

     Обозначим через МинСт(1,s,к) наименьшую стоимость проезда из 1 в s менее чем с k пересадками. Тогда выполняется такое соотношение:

МинСт (1,s,k+1) = наименьшему из чисел МинСт(1,s,k) и МинСт(1,i,k) + a[i][s] (i=1..n)

     Как отмечалось выше, искомым ответом является МинСт(1,i,n) для всех i=1..n. k:= 1; for i := 1 to n do begin x[i] := a[1][i]; end; {инвариант: x[i] := МинСт(1,i,k)} while k <> n do begin | for s := 1 to n do begin | | y[s] := x[s]; | | for i := 1 to n do begin | | | if y[s] > x[i]+a[i][s] then begin | | | | y[s] := x[i]+a[i][s]; | | | end; | | end | | {y[s] = МинСт(1,s,k+1)} | | for i := 1 to n do begin x[s] := y[s]; end; | end; | k := k + 1; end;      Это - алгоритмом динамического программирования, или алгоритмом Форда - Беллмана.

     Программа останется правильной , даже если не заводить массива y, а производить изменения в самом массиве x (заменив в программе все вхождения буквы y на x и затем удалить ставшие лишними строки).

     Этот алгоритм может быть улучшен в двух отношениях: можно за то же время O(n3) найти наименьшую стоимость проезда i->j для ВСЕХ пар i,j (а не только с i=1), а можно сократить время работы до O(n в степени 2). Правда, в последнем случае нам потребуется, чтобы все цены a[i][j] были неотрицательны.

Обсудить на форуме »

  Комментарии для веб-мастера

Автор: Nikolai

Время: 17-10-03 10:29

The most important thing here is to understand: МинСт (1,s,k+1) = наименьшему из чисел МинСт(1,s,k) и МинСт(1,i,k) + a[i][s] (i=1..n)

  

Автор: Eleshka

Время: 04-12-03 05:12

Esli znatj kak voobsche dejstvujut algoritmi po nahozhdeniju kratchajshego puti, to vse oboznachenija ponjatni: a - massiv vershin s ih dlinnoj puti n - kol-vo vershin k - verhsini, cherez kotorie lezhit korotkij putj s - vershina-konec grafa

  

Автор: sh

Время: 09-12-03 10:07

алгоритм взят из книжки Шеня, без переделок и комментариев. читайте оригинал

  

Автор: Без имени

Время: 06-01-04 09:43

Хе! Ето на каком языке писано? Pascal видимо? А чо за | | | |?

  

Автор: мало по графам

Время: 08-03-04 10:33

  

Автор: я

Время: 26-04-04 10:24

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

  

Автор: Sergey

Время: 05-09-04 01:47

Блин! Ребята! Тут же всё написано: МинСт (1,s,k+1) = наименьшему из чисел МинСт(1,s,k) и МинСт(1,i,k) + a[i][s] (i=1..n) Если нехрена не понимаете, то читайте что такое динамическое программирование... Статья про Алгоритм Форма-Беллмана, а не про динамическое программирование.

  

Автор: COOPER

Время: 10-12-04 05:01

Тот, кто знает, тот все поймет, а тот, кто ни хрена не понимает, должен учиться, учиться и учиться!

  

Автор: Арсен

Время: 14-12-04 10:43

Вы суки мне нужен курсовик а то Хоменко порвет!!! а тут вес не то что надо...

  

Автор: к Арсену

Время: 09-01-05 03:15

Хм... Хоменко, говоришь.....интересно... енто случайн не тетя Таня?:)

  

Автор: Арт

Время: 06-02-05 06:16

Нда, ребят. Вы прочитайте Окулова: Программирование в алгоритмах. Там всё основное о графах. А потом сядбте за Кормена. вот и все дела. Не зная обхода в ширину вы не сможете допетрить до форда-Беллмана.

  

Ваши комментарии. Вопросы будут удалены: для них есть форум. Имя: E-mail:   

Copyright 2000-2002 © Ilia Kantor, при поддержке проекта MANUAL.RU

[AD-SIZE] hotlog_js="1.0";hotlog_d=document; hotlog_n=navigator;hotlog_rn=Math.random(); hotlog_n_n=(hotlog_n.appName.substring(0,3)=="Mic")?0:1; hotlog_r=""+hotlog_rn+"&s=2161&r="+escape(hotlog_d.referrer)+"&pg="+ escape(window.location.href); hotlog_d.cookie="hotlog=1"; hotlog_r+="&c="+(hotlog_d.cookie?"Y":"N"); hotlog_d.cookie="hotlog=1; expires=Thu, 01-Jan-70 00:00:01 GMT" hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2";hotlog_s=screen; hotlog_r+="&wh="+hotlog_s.width+'x'+hotlog_s.height+"&px="+((hotlog_n_n==0)? hotlog_s.colorDepth:hotlog_s.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; hotlog_d.write("")