Answers:
看来您的问题出在N L上。这是一个算法。
首先,不确定地猜测从s到t的路径。如果您猜错了,请拒绝。调用此算法一。
考虑以下不确定性算法B,它确定是否存在至少两条路径。给定图和小号,吨,对于所有的对不同边缘ë ,˚F,猜从路径小号到吨包括Ë但不˚F,然后猜从路径小号到吨包括˚F但不ë。如果猜测正确,则接受。如果对e和f的所有选择都没有接受,则拒绝。注B
现在,集合L (B )是s - t图的集合,具有从s到t的至少两条路径。因为N L = c o N L,所以B的补码也在N L中,即,我们可以确定s和t在不确定的对数空间中是否具有少于两条路径。
最终的算法是:“运行A。如果A接受,则运行B的补码并输出其答案。”
我不知道参考。
更新:如果您真的想要参考,请查阅本文第3节的第一段。但这可能只是引用此结果的众多参考文献之一。将结果称为“民俗”会比引用恰好提到它的论文更为合理。
更新2:假设您要确定是否存在唯一的简单路径。在那种情况下,算法A不必更改:如果根本没有路径,那么就有一条简单路径。我相信下面的修改将用于算法工作乙。
我们要重写算法B,以便它接受至少存在两个简单路径的条件。
首先考虑以下多项式时间算法。找到最短路径P从小号到牛逼。对于每一个边缘ê在P,检查是否有另一个小号 - 牛逼,不通过走路径ê。如果找到这样的路径,请接受。如果您找不到其他路径,请拒绝。因为P是最短的,所以它没有周期,并且如果存在另一条不使用P的边的路径,那么存在另一条简单且不使用P的边的路径
我们将在N L中实现此算法。如果我们有一个ň 大号算法用于查询边缘Ë在一个固定的路径P,我们可以实现上述的不确定性LOGSPACE:通过所有的边迭代ê在P,猜一个小号 - 牛逼的路径,并检查沿着参观每一个角落方式,它们都不等于e。
因此,我们需要一种“路径预言”,这是一种具有以下特性的N L算法:给定i = 1 ,… ,n,在每个计算路径中,该算法要么报告特定固定s - t路径上的第i条边,要么拒绝。我们可以通过使用N L = c o N L来从字典上隔离第一个路径来获得路径预言。
这是路径oracle的草图。
通过尝试所有k = 1 ,… ,n并使用N L = c o N L来找到k,这是从s到t的最短路径的长度。
ķ s Ť k = 1 ,… ,n ñL = C o N大号 设置变量u := s,x := 1,j := k。
u :=秒 x := 1 j := k 对于按字母顺序排列的u的所有邻居v
v ü 确定从v到t的长度为j − 1的路径(使用结果N L = c o N L)。更准确地说,同时运行用于s - t连接(长度为j − 1)的不确定性算法及其互补算法。当其中一个接受时,给出答案(必须正确;两个都不能接受)。如果两者都拒绝,则拒绝。
v Ť j − 1 ñL = C o N大号 s Ť j−1 如果没有路径,请继续下一个邻居。如果您用尽了所有邻居,那就拒绝。
如果存在路径,则如果x = i,则输出(u ,v )作为从s到t的路径上的第i个边。否则递增x,递减j,设置u := v,如果v ≠ t则再次启动for循环。
x=i (u,v) i s t x j u:=v v≠t 如果x < i在达到t后输出不好的i(给定的i太大)。
x<i t i i
给定i,此算法要么在字典上从s到t的最短路径P上输出第i个边,要么拒绝。