693
правки
Изменения
→Продвинутый алгоритм
===Псевдокод===
'''while''' f
===Корректность===
====Псевдокод====
m = (l + r) / 2
<font color="green">// вычитаем её из веса каждого ребра в сети</font>
'''for''' e '''in''' edges
'''while''' l > r - 1
===Продвинутый алгоритм===
Добавим к нашему графу вершину <tex>s</tex> и ребра рёбра из нее неё во все остальные вершины.
Запустим [[алгоритм Форда-Беллмана]] и попросим его построить нам квадратную матрицу со следующим условием: <tex>d[i][u]</tex> {{---}} длина минимального пути от <tex>s</tex> до <tex>u</tex> ровно из <tex>i</tex> ребер.
Тогда длина оптимального цикла <tex>\mu^{*}</tex> минимального среднего веса вычисляется как <tex>\min\limits_{u} {\max\limits_{k} {\dfrac{d[n][u]-d[k][u]}{n-k}}}</tex>.
====Псевдокод====
'''Node''' s
'''Edge[]''' e
insert(s)
i = 0
'''for''' u '''in''' G
fordBellman(s)
<font color="green">// <tex>m</tex> {{---}} длина оптимального цикла</font>
m = <tex>\min\limits_{u} {\max\limits_{k} }</tex>((d[n][u] - d[k][u]) / (n - k))
<!-----<font color="green">// запомнив значения <tex>u</tex> и <tex>k</tex>, дающих оптимальный результат, найдём цикл</font>---------> <!----чуть не забыла про отступы, дура тупая----->
==См. также==