路径双覆盖,递归设置

Posted

技术标签:

【中文标题】路径双覆盖,递归设置【英文标题】:Path double cover, recursion set up 【发布时间】:2022-01-21 15:16:14 【问题描述】:

我正在处理路径双重覆盖问题。我有无向连通图 G,并且我将每条边更改为 2 条有向边,并且它们中的每一条都在相反的方向上。然后目标是在这个有向图中找到一组路径(无循环),以便每个顶点一次用作路径的起点,一次用作另一条路径的终点。每个有向边只使用一次。

undirected graph G directed graph G

对于这个例子,有一组路径 P=(1,2,4),(4,3,1),(2,1,3),(3,4,2)。

目前已知有 2 个图 K3 和 K5(具有 3 个和 5 个顶点的全连接图)不能用这种方式覆盖。

我想制作一个脚本,它会找到我这个封面或告诉我是否没有。我试图生成所有可能的路径,然后在它们中搜索,但对于更大的图形,这种方法不可用(n!复杂性)。我不知道如何设置递归,所以我可以跟踪我使用过的内容。我不在乎时间复杂度,但是如果您有任何提示可以更快地完成它,那就太棒了。 :D

感谢您的任何建议。 :D

【问题讨论】:

【参考方案1】:

您的定义有点混乱-您说您需要在有向图中找到一组路径(无循环),每个顶点有 1 条出边。这些边没有办法不形成循环(最多n - 1边可以是树边)。

我将假设您的意思是“只有一个周期;没有子周期”。

在这种情况下,您的任务就是确定您的图表是否有Hamiltonian Cycle。

我们可以使用Ore's Theorem作为快速检查:

如果对于 G 的每一对不同的非相邻顶点 v 和 w,deg v + deg w ≥ n 则 G 是哈密顿量。

请注意,这表示“如果”而不是“iif”/“当且仅当”,因此图是哈密顿图,不满足此检查。

为了更进一步,我们可以使用Bondy–Chvátal theorem:

一个图是哈密顿的当且仅当它的闭包是哈密顿的。

我们以与 Ore 定理检查类似的方法获得它的闭包——我们重复添加一条新边,将不相邻的顶点对 uvdeg(v) + deg(u) ≥ n 连接起来,直到不再有与此的对可以找到属性。

完成后,我们检查闭包是否为哈密顿量。如果闭包是complete graph,那么它就是哈密顿量。如果图 g 是哈密顿量,我无法找到任何证据证明闭包将是完整的,但是它似乎确实发生在我能想到的每个示例图上,因此至少它可能比 Ore 定理具有更强的相关性。

最后,你只需要确定图是否有哈密顿循环。我在上面列出了两种方法,你可以执行二次时间检查来肯定地识别一些这样的图(也许全部,再次 - 不确定闭包位的完整性)。

【讨论】:

这张图只是为了说明它可以是任何完整的图,如 K6 或任何二分图(已证明具有双重覆盖) 我不是指插图(我承认我直到刚才才看),我指的是:“那么目标是在这个中找到一组路径(没有循环)有向图”,因为您的解决方案中必须存在循环 如果你有 3 个顶点的路径图(如直线),则不必有循环 bcs,那么它有这个集合 P=(1,2,3),(3,2), (2,1) 它被证明可以在任何树上找到这种双重覆盖 @PatrikKula 我认为我们都误解了对方。我误解了部分问题——我们只考虑每条路径的开始/停止(我们可以重用中间顶点)。另一方面,您刚刚提供的反例创建了一个循环 (1->3->2->1...)。我坚持你的解决方案会产生循环的说法 是的,我认为我们是......我们可以重用顶点,但只能在不同的路径中,每个顶点必须是一次开始和结束顶点,并且每个有向边必须在整个路径集中使用一次。因此,如果我理解正确,那么我应该用有向图制作哈密顿循环,然后将其划分为路径,对吗?我不认为我们可以用 C4 做到这一点

以上是关于路径双覆盖,递归设置的主要内容,如果未能解决你的问题,请参考以下文章

递归的概念

覆盖视图错误递归

剑指 Offer 24. 反转链表(双指针+递归)

剑指 Offer 24. 反转链表(双指针+递归)

剑指 Offer 24. 反转链表(双指针+递归)

JavaScript双递归调用,如何传回结果?