【问题标题】:Hamilton path finding with the use of hamilton cycle function and the opposite task使用汉密尔顿循环函数的汉密尔顿路径查找和相反的任务
【发布时间】:2013-11-10 14:43:41
【问题描述】:

问题是测试图 G 是否包含哈密顿路径,使用哈密顿循环 Hcycle(V,E) 函数,该函数输出真或假 G 是否包含哈密顿循环。

我必须编写一个具有多项式时间复杂度的程序,它必须使用一个必须为这个问题提供输出的哈密顿循环函数来确定无向图 G 是否包含至少一个哈密顿路径。

我还需要编写一个具有相反问题的程序。 (使用Hpath函数判断图是否包含Hemiltonian Cycle)。

我找不到这个问题的解决方案。 我只能使用一次 Hcycle 和 Hpath。

我们假设函数 Hcycle 和 Hpath 以线性时间复杂度运行。

【问题讨论】:

    标签: algorithm graph graph-theory graph-algorithm hamiltonian-cycle


    【解决方案1】:

    Hcycle(V,E) 的路径: 在通过添加一个连接到所有其他顶点的顶点创建的图上调用 Hcycle()。如果新图有一个循环而不是从该循环中删除新节点,我们会得到原始图上的路径。

    按 Hpath(V,E) 循环: 在通过添加一个顶点并将其连接到与一个现有顶点相同的邻居创建的图上调用 Hpath()。这意味着这两个顶点将具有相同的邻居。如果新图有一条路径,则至少一个路径末端位于这两个顶点上。如果其他顶点没有结束,则它位于路径第三位置,通过重新排序路径,我们可以将两个顶点都设置为路径端点。合并这两个顶点(因为它们具有相同的邻居)我们在原始图中得到一个循环。

    Hcycle(V,E) 的路径: 如果图有循环,则它也有路径。如果图形没有比每个未连接的顶点对(v1v2)的循环,则在它们之间添加边并检查Hcycle(V,E+(v1,v2)) 是否存在循环。如果存在循环,则原始图中v1v2 之间存在路径。 Hcycle 被称为 max |V|^2 次。

    按 Hpath(V,E) 循环: 想法是强制路径具有我们知道的端点。这可以通过构建两个顶点的度数为一的图来完成。让N(v) 成为v 的邻居。对于来自N(v1)-v2 的边(v1,v2)n1 和来自N(v2)-v1n2,通过从v1 中删除除n1 之外的所有边,并从v2 中删除除@ 之外的所有边来构造图987654337@。如果该图有一条路径,那么它的终点在v1v2,并且我们的原始图有一个圆圈。 Hpath 被称为 max |E|*|V|^2 次。

    【讨论】:

    • 其实问题是我只能同时使用Hcycle和Hpath一次。
    • 你确定只有一个电话吗?如果是这种情况,那么在具有路径但没有循环的图中,您必须在多项式时间内找到路径端点。这听起来很复杂。
    • 我知道这是问题所在,必须有某种方法可以在多项式时间内通过调用此函数。
    • 通常,一个问题到另一个问题的多项式约简意味着第二个问题的解可以计算多项式次以找到第一个问题的解。这用于表明第一个问题与第二个问题属于同一复杂度。
    • 我不明白为什么你期望任何路径结束于双倍顶点(在 Hpath 循环中)。具体来说,如果增广图包含 hamiltionian 循环,则您可以在任何地方获得路径端点。您应该再添加 2 个顶点,每个顶点连接到一个双倍顶点副本,以强制路径在那里结束。
    【解决方案2】:

    每个哈密顿循环都是哈密顿路径,只需在某处打破循环即可。

    反之则不太容易。蛮力解决方案是: 对于所有的哈密顿路径p,检查p的起点和终点之间是否有边,如果有,做一个循环。但是,如果HPath 只返回某个路径,则无法从中创建循环(我猜)。

    查看Wikipedia

    【讨论】:

    • 问题是图 G 可能包含哈密顿路径,而不必包含哈密顿循环。在这种情况下,您的解决方案会很糟糕。
    • 对于所有的哈密顿路径p,检查p的起点和终点之间是否有边,如果有,做一个循环,否则有没有循环。
    • 我的回答是你对第一个问题的第一个解决方案。第二个如你所写:HPath 只返回一些路径。
    猜你喜欢
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 2023-04-10
    • 2012-03-05
    • 1970-01-01
    • 2014-12-20
    • 2021-06-24
    • 2013-04-13
    相关资源
    最近更新 更多