Беллман Форд и одна олимпиада?

Я получил экзамен на Олимпиаду Три дня назад. Я столкнулся с хорошим вопросом следующим образом.

Мы знаем, что алгоритмы bellman-ford проверяют все ребра на каждом шаге, а для каждого ребра if,

d (v) > д (и) + ш (U, V)

тогда d(v) обновляется таким образом, что w(u,v) - это вес ребра (u, v), а d(u) - длина наилучшего пути поиска для вершины u. если в один шаг мы имеем no update for vertexes, алгоритмы terminate. с учетом этих алгоритмов, для нахождения всего кратчайшего пути из вершины s в графе G с вершиной n после завершения k < n итерации, что из следующего верно?

1) количество ребер во всех кратчайших дорожках от s не более k-1

2) вес всех кратчайших путей из s не превосходит k-1

3) График не имеет отрицательного цикла.

Кто может обсуждать эти варианты?

Ответы

Ответ 1

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

s --> t --> u --> v

Relax s->t, t->u, u->v; shortest path from s->v is three hops,
but B--F has made two iterations.

Если мы выполняем релаксацию одновременно (т.е. всегда используем значения из раунда r-1 в раунде r, даже если round r обновил их), то 1 действительно является правильным, по индукции (глубина самого кратчайшего пути дерева начинается с нуля и растет не более чем в каждом раунде, который не является последним).

2 неверно, потому что кто знает, что такое веса?

  100
s --> t

Relax s->t; weight is 100, but B--F has made two iterations.

3 правильно, потому что по аргументу осреднения, по крайней мере, одна дуга отрицательного цикла была бы нерелаксирована. Пусть v1, ..., vn - цикл. Поскольку дуги ослаблены, имеем d(vi) + len(vi->vi+1) - d(vi+1) >= 0. Суммируем неравенства для всех i и телескопим термины d, чтобы упростить до sum_i len(vi->vi+1) >= 0, в котором говорится, что цикл неотрицателен.

Ответ 2

Я думаю, что вариант 3 неверен, потому что для того, чтобы знать, есть ли отрицательный весовой цикл, алгоритм Bellman ford должен запускаться n раз. сначала n-1 раз, чтобы вычислить кратчайший путь, а затем еще один раз, чтобы проверить, есть ли какое-либо улучшение расстояний, если есть улучшения, это означает, что есть отрицательный весовой цикл.