Блог пользователя Guliash

Автор Guliash, 12 лет назад, По-русски

Дан взвешенный ориентированный граф G = (V, E). Нужно найти кратчайшие пути из s до всех остальных вершин. Известно, что веса рёбер кратчайшего пути из s в любую вершину v образуют битоническую последовательность.

Битоническая последовательность вначале монотонно возрастает, а затем монотонно убывает, или можно путём сдвига получить такую.

Какой есть эффективный алгоритм решения данной задачи? Я как понимаю, что-нибудь лучше чем Беллман-Форд и с использованием свойства битонизма.

Ещё интересует вопрос. Необходимо найти кратчайшие простые пути в взвешенном ориентированном графе из вершины s до всех остальных. Граф может содержать отрицательные циклы. Как оптимально решается эта задача? Увеличением весов на константу, так чтобы не было отрицательных рёбер и последующий алгоритм Дейкстры или Беллмана-Форда?

  • Проголосовать: нравится
  • +1
  • Проголосовать: не нравится

»
12 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Произведите релаксацию всех ребер ровно V (число вершин) раз. Если при исполнении последней итерации длина кратчайшего пути до какой-либо вершины уменьшилась, значит в графе есть цикл отрицательного веса, достижимый из вершины S. Это касательно второго вопроса.

Можно найти кратчайшие пути из вершины, которые являются возрастающими и отдельно найти кратчайшие пути, являющиеся убывающими. Например, алгоритмом Дейкстры. Затем для каждой вершины найти все вершины пересечения кратчайшего возрастающего и убывающего пути. Среди путей вида "возрастающий до точки пересечения, затем убывающий" найти минимальный. Это по первому вопросу.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится -15 Проголосовать: не нравится

Битонический кратчайший путь — это асфальт