假设我们有一个有向图和两个节点和。我想知道是否已经有算法来计算以下决策问题:
和之间是否至少有两条相同长度的路径?
复杂度如何?我可以在多项式时间内求解吗?
我想在图表上添加一个新的约束,也许这个问题可以解决。在邻接矩阵上,每一列都不为空。因此,每个节点在输入上至少有一个箭头,并且至少还有一个与其连接的节点。因此,如果节点是第个节点,则是图中的边。
假设我们有一个有向图和两个节点和。我想知道是否已经有算法来计算以下决策问题:
和之间是否至少有两条相同长度的路径?
复杂度如何?我可以在多项式时间内求解吗?
我想在图表上添加一个新的约束,也许这个问题可以解决。在邻接矩阵上,每一列都不为空。因此,每个节点在输入上至少有一个箭头,并且至少还有一个与其连接的节点。因此,如果节点是第个节点,则是图中的边。
Answers:
考虑图,我们想知道从A到B的两条不同长度的路径是否相同。该怎么办?简单:将两个路径合而为一。定义图形ģ '与顶点V × V × { 0 ,1 }。你让在步骤摹'通过在两个独立的步骤摹。附加位告诉您两条路径是否已经彼此分开。
形式上,存在边缘在ģ '当且仅当我→ 我',Ĵ → Ĵ '在G ^和ë ' = È ∨ (我,我')≠ (j ,j ')。
该算法检查是否存在一个路径到(乙,乙,1 )在ģ ',这是ø (V 4),或者类似的东西ø ((V + ë )2)。
如果您同意该算法正确,那么,的路径的长度最多为2 n 2,因此必须最晚在该长度处发生潜在的“路径冲突”。你可以得到一个Ô (V ω日志V )从这一观察,在那里,规则ω是矩阵乘法的复杂性(询问你是否需要一个扰流板......)。
我强烈感觉到有一种算法,它使用了更多问题的结构。
也许我对这个问题有一个答案,但我不确定它是否有效。
“找到”两条路径并不重要,唯一重要的是“知道”它们是否存在。我认为这不是NP完全问题。
因此,采取邻接矩阵。我们可以轻松地假设它填充有0,1值。(0 =不存在边缘; 1 =存在边缘)让我们使用与3个值(0,1,2),下面的代数,一切作品照例除了:2 + <东西> = 2 ; 2 * <大于0的任何值> = 2
所以,如果有来自两个相同长度的路径我期待有一个值p,使得(甲 p )我,Ĵ = 2。
令为图中的顶点数(或者说A的维数为n × n)。我不知道p的值,但是如果我通过与A乘以最多n 2来迭代A,那么我应该找到答案。(因此,p < n 2)(感觉是我检查A,然后我检查A 2,然后我检查A 3,依此类推...)
这是我的论点:
一旦找到,我就停止迭代。
我错了吗?