Я хотел бы знать, может ли быть решена следующая проблема в (недетерминированное пространство журнала):
Для ориентированного графа с двумя выделенными вершинами s и t существует ли единственный путь из s в t в G ?s tт г
Я чувствую, что он, вероятно, находится в так как мы можем решить, есть ли путь - и нет ли такого пути. Тем не менее, подсчет количества таких путей является -hard (Valiant, 1979).
Итак, мои вопросы: у вас есть ссылки на это? Очевидно ли, что он находится в ? Или это не в ?
Ответы:
Кажется, ваша проблема вNL . Вот алгоритм.
Во-первых, недетерминированно угадать путь отs до t . Если вы угадаете неправильно, отклоните . Назовите этот алгоритм A .
Рассмотрим следующий недетерминированный алгоритм , который определяет, существуют ли хотя бы два пути. Учитывая граф и , для всех пар различных ребер угадать путь от до который включает но не , затем угадать путь от до который включает но не . Если догадки верны, примите . Если для всех вариантов и не принято ни одного подтверждения , отклоните . Примечание реализуемо в недетерминированном пространстве журнала.сек , т е , е с т е е с т е е е е ВB s,t e,f s t e f s t f e e f B
Теперь множество - это множество - графов, по крайней мере с двумя путями из в . Поскольку , дополнение также в , то есть, мы можем определить, и иметь меньше , чем два пути, в недетерминированных logspace.s t s t N L = c o N L B N L s tL(B) s t s t NL=coNL B NL s t
Последний алгоритм: «Запустите Если принимает, запустите дополнение и выведите его ответ».A BA A B
Я не знаю ссылки.
ОБНОВЛЕНИЕ: Если вы действительно хотите ссылку, ознакомьтесь с первым параграфом Раздела 3 этого документа . Но это, вероятно, только одна из многих ссылок, которые ссылаются на это следствие. Было бы более разумно назвать результат "фольклором", а не ссылаться на статью, в которой упоминается об этом.
ОБНОВЛЕНИЕ 2: Предположим, вы хотите определить, существует ли уникальный простой путь. В этом случае алгоритм не должен изменяться: если путь вообще существует, тогда существует простой путь. Я считаю , что следующая модификация будет работать для алгоритма .BA B
Мы хотим переписать алгоритм так, чтобы он принимал, если есть хотя бы два простых пути.B
Сначала рассмотрим следующий алгоритм полиномиального времени для задачи. Найти кратчайший путь от до . Для каждого ребра в проверьте, существует ли другой путь - , который не проходит через . Если вы найдете такой путь, то примите . Если вы никогда не найдете другой путь, то отклоните . Поскольку является самым коротким, у него нет цикла, и если есть другой путь, который не использует какое-либо ребро , то есть другой путь, который прост и не использует какое-то ребросек т е р сек т е Р Р РP s t e P s t e P P P , (Этот алгоритм используется для решения проблемы «вторых кратчайших путей».)
Мы будем реализовывать этот алгоритм в . Если бы у нас был алгоритм для запроса ребер в фиксированном пути , мы могли бы реализовать вышеизложенное в недетерминированном логарифмическом пространстве: перебирая все ребра в , угадывая путь - и проверяя его для каждого ребра, посещенного по пути , ни один из них не равен .N L E P e P s t eNL NL e P e P s t e
Итак, нам нужен «оракул пути», алгоритм со свойством: учитывая , в каждом пути вычислений алгоритм либо сообщает й фронт на конкретном фиксированном пути - , либо отказаться . Мы можем получить путь оракула, используя чтобы выделить лексикографически первый путь.i = 1 , … , n i s t N L = c o N LNL i=1,…,n i s t NL=coNL
Вот набросок пути оракула.
Учитывая , этот алгоритм либо выводит е ребро по лексикографически кратчайшему пути из в , либо отклоняет.я P S Ti i P s t
источник