嵌入欧氏平面(2D)的图形的最短非相交路径


14

您将使用哪种算法来找到图的最短路径,该最短路径被嵌入到欧几里德平面中,因此该路径不应包含任何自相交(在嵌入中)?

例如,在下面的图表中,你想从去。通常,像Dijkstra算法那样的算法会产生如下序列:00-32

[0030321个24-32]=7+2

完整图:

在此处输入图片说明

最短的路径:

在此处输入图片说明

最短的非相交路径:

在此处输入图片说明

但是,此路径在欧几里得平面上相交,因此我需要一种算法,该算法可以为我提供最短的非相交序列,在这种情况下:

[003033065-32]=11。

该路径比最短路径长,但它是最短的非相交路径。

是否有(有效的)算法可以做到这一点?

TikZ来源


2
好问题!(+1)。您能否谈谈出现此问题的应用程序或上下文?我很感兴趣 (PS另请注意:解决这个难题的明显方法是查看是否可以为每个交点引入新的顶点,即,一个边缘可以与另一边缘相交的每个点。但是,我意识到对于某些/许多应用程序这也许是不可能的)。
DW

2
@DW,这是我重新阐述Babibu措辞不佳的驴子/小马燃烧问题;该应用程序是他的Euclidean TSP启发式算法,我不确定他打算如何使用它,但是我想他想知道他是否已经找到了两个点之间的路径,而他已经访问了其他几个点(Euclidean TSP的最佳行程将是不相交)。是的,如果您可以引入新的节点,那就太好了,但问题是您不能这样做(当然,您也不能为欧氏TSP引入新的城市)。
Realz Slaw

1
让我尝试将路径存在问题转换为3SAT。如何跨越两个信号同时不跨越两个路径似乎是最大的挑战。
约翰·德沃夏克

1
是的 我的意思是通过此方法解决SAT。
约翰·德沃夏克

Answers:


11

甚至决定是否存在任何路径都是NP完全的。

显然可以验证任何给定路径在给定图中都是有效路径。因此,有界长度问题在NP中,其子集也就是任意路径问题。

现在,为了证明任意路径问题(以及有界长度问题)的NP硬度,让我们将SAT-CNF简化为该问题:


全局结构是由线段组成的网格,并与子句段的列相连。逻辑公式是令人满意的,前提是存在通过该图的不相交的路径。

不可能跨越两条路径,但是有必要跨越两条逻辑线。而是严格给出路径流:一个连线点由两个节点给出。路径会强制减少路径穿过的连线点的顺序。逻辑由选择哪个节点表示。只要通过所有连线点,就可以选择任何路径。

在此图中,路径由红色曲线表示,逻辑流程由黑色线表示:

左侧的电线网格,右侧的子句列。

现在让我们构建每个组件。


布线使用三个瓦片:交叉点,分支点和垂直电线。让我们从最困难的一个开始:

交叉的基本思想是为每对线点准备一条路径,并充分弯曲可能的路径,以使除编码相同逻辑的线对(兼容路径)以外的所有线对彼此交叉。当然,我们不能只说两个平行边相交,而是可以引入额外的2阶节点来使两条路径相交。

假设路径从北到西,从南到东,我们可以:收集每条从北到北的路径,以及从东到北的兼容路径(某些不兼容的路径会相互交叉);通过反转线对的顺序使每个线对彼此交叉;将路径分布到其南端和西端。最好用图表来解释。在此,每对节点代表一个连线点。具有相同颜色代码(带有相同逻辑)的路径不会相交,而具有不同颜色代码的路径会相交:

上面的图形描述

分支点垂直导线的工作原理相同,但是相关的路径较少:

两条路径就足够了。 导线本质上是分支点,分支已损坏

¬一种¬

在此处输入图片说明

通过以不同方式分支读取导线,可以概括这种归纳以编码AND和OR门的任意树。尤其是,SAT-CNF和SAT-DNF都可以以上述方式减少到非相交路径问题。


哇,做得好。我尚未对其进行审核,但是您进行的工作非常出色。
Realz Slaw

好的,我只想总结一下我的理解:使用第一个小工具,可以跨越任意两个文字路径对并保持使用的路径。因此,不必担心路径布局的平面性(就像PlanarCircuitSat中的xor小工具用于电路一样)。然后,使用最后的小工具,可以创建任意逻辑子句(不再需要担心平面性)。它是否正确?
Realz Slaw

这似乎是正确的,但是您必须确保总体布局有两点:能够使用NIP路径为所有小工具供电(这应该总是可能的-如果路径陷入中心,则可以将导线小工具引入其中将路径的各个端部放在一起),并确保读取导线中的所有路径彼此交叉,这样就不可能在导线中反转(在我看来,可以保证没有真实的子句(且不跨越任何文字),如果所有子句都在电路的外部(在同一面上,起始和结尾在)。
John Dvorak

确保阅读导线中的所有路径都容易相交-如果要确保,只需分支n条路径,然后立即将它们全部交叉即可。我认为这从来没有必要。
John Dvorak

1
我将OpenOffice Draw用于全局结构,将[yEd](www.yworks.com/products/yed)用于其余部分。我应该在中使用进行编辑<sub>吗?
John Dvorak

-1

这个问题似乎可以追溯到1944年的Turan。这似乎是对理论和算法的很好的综述,图的交叉数: Mutzel的理论与计算。维基百科在图的交叉数量下有一些信息


1
也许这是更好的评论?
Juho 2013年

它科学地回答了“您将使用哪种算法”这一基本问题
vzn13年

1
虽然从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
约翰·德沃夏克

jan引用了stackexchange meta的引用。虽然那是一个有效的主意,但引文在科学/数学中的作用与编程技巧网站不同。...[[当然,对于我来说,该参考文献目前尚无详细的答案] ..无论如何,类似jans的构建虽然有用/有价值,但已经在文献和科学中出现,它是[试图]找到它的标准过程/最佳实践的一部分
。...– vzn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.