您将使用哪种算法来找到图的最短路径,该最短路径被嵌入到欧几里德平面中,因此该路径不应包含任何自相交(在嵌入中)?
例如,在下面的图表中,你想从去。通常,像Dijkstra算法那样的算法会产生如下序列:
完整图:
最短的路径:
最短的非相交路径:
但是,此路径在欧几里得平面上相交,因此我需要一种算法,该算法可以为我提供最短的非相交序列,在这种情况下:
该路径比最短路径长,但它是最短的非相交路径。
是否有(有效的)算法可以做到这一点?
您将使用哪种算法来找到图的最短路径,该最短路径被嵌入到欧几里德平面中,因此该路径不应包含任何自相交(在嵌入中)?
例如,在下面的图表中,你想从去。通常,像Dijkstra算法那样的算法会产生如下序列:
完整图:
最短的路径:
最短的非相交路径:
但是,此路径在欧几里得平面上相交,因此我需要一种算法,该算法可以为我提供最短的非相交序列,在这种情况下:
该路径比最短路径长,但它是最短的非相交路径。
是否有(有效的)算法可以做到这一点?
Answers:
甚至决定是否存在任何路径都是NP完全的。
显然可以验证任何给定路径在给定图中都是有效路径。因此,有界长度问题在NP中,其子集也就是任意路径问题。
现在,为了证明任意路径问题(以及有界长度问题)的NP硬度,让我们将SAT-CNF简化为该问题:
全局结构是由线段组成的网格,并与子句段的列相连。逻辑公式是令人满意的,前提是存在通过该图的不相交的路径。
不可能跨越两条路径,但是有必要跨越两条逻辑线。而是严格给出路径流:一个连线点由两个节点给出。路径会强制减少路径穿过的连线点的顺序。逻辑由选择哪个节点表示。只要通过所有连线点,就可以选择任何路径。
在此图中,路径由红色曲线表示,逻辑流程由黑色线表示:
现在让我们构建每个组件。
布线使用三个瓦片:交叉点,分支点和垂直电线。让我们从最困难的一个开始:
交叉的基本思想是为每对线点准备一条路径,并充分弯曲可能的路径,以使除编码相同逻辑的线对(兼容路径)以外的所有线对彼此交叉。当然,我们不能只说两个平行边相交,而是可以引入额外的2阶节点来使两条路径相交。
假设路径从北到西,从南到东,我们可以:收集每条从北到北的路径,以及从东到北的兼容路径(某些不兼容的路径会相互交叉);通过反转线对的顺序使每个线对彼此交叉;将路径分布到其南端和西端。最好用图表来解释。在此,每对节点代表一个连线点。具有相同颜色代码(带有相同逻辑)的路径不会相交,而具有不同颜色代码的路径会相交:
分支点和垂直导线的工作原理相同,但是相关的路径较少:
通过以不同方式分支读取导线,可以概括这种归纳以编码AND和OR门的任意树。尤其是,SAT-CNF和SAT-DNF都可以以上述方式减少到非相交路径问题。
<sub>
吗?