Изменения

Перейти к: навигация, поиск
м
rollbackEdits.php mass rollback
'''func''' findMinCycleBinarySearch('''int''' l, '''int''' r)
<!-----<font color="green">// добавляем мнимую вершину находим среднюю величину <tex>sm</tex> и проводим рёбра нулевого веса в каждую вершину графа</font>--------->
m = (l + r) / 2
<!-----<font color="green">// добавляем мнимую вершину <tex>s</tex> и проводим рёбра нулевого вычитаем её из веса каждого ребра в каждую вершину графасети</font>--------->
'''for''' e '''in''' edges
<!-----<font color="green">// добавляем мнимую вершину <tex>s</tex> и проводим рёбра нулевого веса в каждую вершину графа</font>--------->
e.weight -= m
<!-----<font color="green">// добавляем мнимую вершину <tex>s</tex> и проводим рёбра нулевого веса в каждую вершину графа</font>--------->
'''while''' l > r - 1
<!-----<font color="green">// добавляем мнимую вершину <tex>s</tex> и проводим рёбра нулевого веса в каждую вершину графа</font>--------->
'''if''' <tex>\exists</tex>C : M(C) < 0 <!--- cho-t xz za4em C: mb exists? eee ugadala)0))--->
<!----- <font color="green">// добавляем мнимую вершину если есть отрицательный цикл, то веса циклов находятся в диапазоне <tex>s[l;m]</tex> и проводим рёбра нулевого веса в каждую вершину графа // рассмотрим этот промежуток</font>--------->
findMinCycleBinarySearch (l, m)
<!-----<font color="green">// добавляем мнимую вершину <tex>s</tex> и проводим рёбра нулевого веса в каждую вершину графа</font>--------->
'''else'''
<!----- <font color="green">// добавляем мнимую вершину иначе запускаем двоичный поиск на отрезке <tex>s[m;r]</tex> и проводим рёбра нулевого веса в каждую вершину графа</font>--------->
findMinCycleBinarySearch (m, r)
<!-----<font color="green">// добавляем мнимую вершину <tex>s</tex> и проводим рёбра нулевого веса в каждую вершину графа</font>--------->
===Продвинутый алгоритм===
Добавим к нашему графу вершину <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>.
====Псевдокод====
'''func''' findMinCycle('''Graph''' G)
<!-----<font color="green">// добавляем вводим мнимую вершину <tex>s</tex> и проводим , от которой проведём рёбра нулевого веса в каждую вершину графа</font>--------->
'''Node''' s
<!-----<font color="green">// добавляем мнимую вершину <tex>s</tex> и проводим рёбра нулевого веса в каждую вершину графа</font>--------->
'''Edge[]''' e
<!-----<font color="green">// добавляем мнимую вершину <tex>s</tex> и проводим рёбра нулевого веса в каждую вершину графа</font>--------->
insert(s)
<!-----<font color="green">// добавляем мнимую вершину <tex>s</tex> и проводим рёбра нулевого веса в каждую вершину графа</font>--------->
i = 0
<!-----<font color="green">// добавляем мнимую вершину <tex>s</tex> и проводим рёбра нулевого веса в каждую вершину графа</font>--------->
'''for''' u '''in''' G
<!-----<font color="green">// добавляем мнимую вершину <tex>s</tex> и проводим рёбра нулевого веса в каждую вершину графа</font>--------->
e[i].begin = s
<!-----<font color="green">// добавляем мнимую вершину <tex>s</tex> и проводим рёбра нулевого веса в каждую вершину графа</font>--------->
e[i].end = u
<!-----<font color="green">// добавляем мнимую вершину <tex>s</tex> и проводим рёбра нулевого веса в каждую вершину графа</font>--------->
e[i].weight = 0
<!-----<font color="green">// добавляем мнимую вершину <tex>s</tex> и проводим рёбра нулевого веса в каждую вершину графа</font>--------->
i++
<!-----<font color="green">// добавляем мнимую вершину <tex>s</tex> и проводим рёбра нулевого веса в каждую вершину графа</font>строим матрицу кратчайших расстояний, запустив алгоритм Форда---------> <!-----<font color="green">// добавляем мнимую вершину Беллмана из вершины <tex>s</tex> и проводим рёбра нулевого веса в каждую вершину графа</font>--------->
fordBellman(s)
<!-----<font color="green">// добавляем мнимую вершину <tex>sm</tex> и проводим рёбра нулевого веса в каждую вершину графа{{---}} длина оптимального цикла</font>--------->
m = <tex>\min\limits_{u} {\max\limits_{k} }</tex>((d[n][u] - d[k][u]) / (n - k))
<!-----<font color="green">// добавляем мнимую вершину запомнив значения <tex>su</tex> и проводим рёбра нулевого веса в каждую вершину графа<tex>k</tex>, дающих оптимальный результат, найдём цикл</font>--------->
<!----чуть не забыла про отступы, дура тупая----->
1632
правки

Навигация