Самый Длинный Простой Путь
Итак, я понимаю, что задача поиска самого длинного простого пути в графе NP-трудна, так как вы могли бы легко решить проблему Гамильтоновой схемы, установив веса ребер на 1 и увидев, равна ли длина самого длинного простого пути числу ребер.
мой вопрос: какой путь вы бы получили, если бы взяли график, нашли максимальный вес ребра,m
, заменил каждый вес края w
С m - w
, и запустил стандартный алгоритм поиска кратчайшего пути на это? Это явно не самый длинный простой путь, так как если бы он был, то NP = P, и я думаю, что доказательство для чего-то подобного было бы немного сложнее =P.
2 ответов
alt текст http://dl.getdropbox.com/u/317805/path2.jpg
график выше преобразуется в ниже, используя Ваш алгоритм.
самый длинный путь-красная линия на приведенном выше графике.И в зависимости от того, как нарушаются связи и алгоритм, который вы используете, кратчайший путь в преобразованном графике может быть синей линией или красной линией. Таким образом, преобразование Весов ребер графа с использованием константы, о которой Вы упомянули, не дает существенных результатов. Это почему нельзя найдите самый длинный путь, используя алгоритмы кратчайшего пути, независимо от того, насколько вы умны. Более простым преобразованием может быть отрицание всех Весов ребер и запуск алгоритма. Я не знаю, ответил ли я на ваш вопрос, но что касается свойства path, преобразованный граф не имеет никакой полезной информации о расстоянии.
однако это конкретное преобразование полезно в других областях. Например, вы можете заставить алгоритм выбрать определенный вес ребра в bipatrite matching, если у вас есть более одного ограничения, добавив огромную константу.
- Edit: мне сказали добавить это утверждение: приведенный выше график не только о физическом расстоянии. Им не нужно удерживать неравенство треугольника. Спасибо.
Если бы вы могли решить проблемы кратчайшего пути с отрицательными весами, вы нашли бы самый длинный путь, два эквивалентны, это можно было бы сделать, поставив вес-w вместо w
стандартным алгоритмом для отрицательных Весов является Беллмана-Форда. Однако алгоритм не будет работать, если в графе есть цикл, такой, что сумма ребер отрицательна. В созданном графике все такие циклы имеют отрицательные веса сумм, поэтому алгоритм не получится. Если конечно у вас нет циклов, в таком случае у вас есть дерево (или лес) и проблема решается с помощью динамического программирования.
Если мы заменим вес w на m-w, что гарантирует, что все веса будут положительными, то кратчайший путь можно найти с помощью стандартных алгоритмов. Если кратчайший путь P на этом графике имеет K ребер, то длина равна k*m-w(P), где w(P) - длина пути с исходными весами. Этот путь не обязательно самый длинный, однако из всех путей с K ребрами P является самым длинным.