Изменения

Перейти к: навигация, поиск

Алгоритм отмены цикла минимального среднего веса

169 байт добавлено, 22:49, 26 декабря 2016
Продвинутый алгоритм
===Продвинутый алгоритм===
Добавим к нашему графу вершину <tex>s</tex> и ребра из нее во все остальные вершины.
Рассмотрим [[алгоритм Форда-Беллмана]] и попросим его построить нам следущую квадратную матрицусо следующим условием:<codetex> d[i][u] <// tex> {{---}} длина минимального пути от <tex>s </tex> до <tex>u </tex> ровно из <tex>i ребер</codetex>ребер.
Тогда длина оптимального цикла <tex>\mu^{*}</tex> минимального среднего веса вычисляется как <tex>\min\limits_{u} {\max\limits_{k} {\frac{d[n][u]-d[k][u]}{n-k}}}</tex>.
Достаточно будет доказать это правило для <tex>\mu^{*}=0</tex>, так как для других <tex>\mu^{*}</tex> можно просто отнять эту величину от всех ребер и получить снова случай с <tex>\mu^{*}=0</tex>.
Почему это так? Грубо говоря, достаточно доказать для Чтобы найти цикл после построения матрицы <tex>\mu^{*}=0d[k][u]</tex>, так как для других запомним, при каких <tex>\mu^{*}u</tex> можно просто отнять его величину от всех ребер и получить рассматриваемый случай.  ---как же найти сам циклЗапомним, при каких <tex>uk</tex> и достигается оптимальное значение <tex>k\mu^{*}</tex> достигается этот минимум, и, используя <tex>d[n][u]</tex>, поднимемся по указателям предков поднимаемся. Как только мы зациклимся попадем в уже посещенную вершину {{---}} мы нашли цикл минимального среднего веса.
Этот алогоритм работает за <tex>O(VE)</tex>.
276
правок

Навигация