【问题标题】:Finding all possible simple path in an undirected graph is NP hard/ NP complete在无向图中找到所有可能的简单路径是 NP hard/ NP complete
【发布时间】:2020-10-16 14:23:40
【问题描述】:

需要证明:

在无向图中找到所有可能的简单路径是 NP 难/ NP 完全的。该图可能包含同一对节点和循环之间的多条边。

我已经搜索过了,有一些想法或讨论。但我需要一个直接证明/链接,说明复杂性是 NPC/NP-Hard。

【问题讨论】:

    标签: graph-theory np np-complete np-hard


    【解决方案1】:

    “查找某种类型的所有对象”形式的问题不是 NP 完全的,因为 NP 纯粹由 决策问题 组成,这些问题有是/否的答案。所以这个问题不可能是NP完全的。

    如果您特别需要按大小降序列出路径,那么问题将是 NP-hard。如果您可以按大小降序列出所有路径,那么您只需检查第一条路径以查看它是否通过所有节点。如果是这样,太好了!您的图有一条哈密顿路径,并且找到哈密顿路径是 NP-hard。

    另一方面,如果您按长度升序列出路径,那么假设您使用的是图灵机,那么简单地读取所有路径以到达最后一个路径的成本将超过多项式时间,所以这种减少是行不通的。一个类似的论点表明,如果路径以任意顺序返回,这种减少将不起作用。我怀疑,但不完全确定,该版本的问题是否是 NP 难题尚不清楚,但我愿意对此进行更正。

    考虑到图中的简单路径的数量可以是 O(n!),这更有趣,当图是一个完整的图时会发生这种情况(所有节点对都由边连接)。某件事需要很长时间才能完成这一事实并不立即意味着它是 NP-hard 或 NP-complete。

    希望这会有所帮助!

    【讨论】:

    • 能否以某种方式使用最长路径问题(查找路径长度至少为 k)?对于给定的图 G(V,E),如果我使用 k=1 到 |V|-1 会怎样?是否证明这个问题是 NP 难的?
    • 如果你被允许限制返回的路径的长度,使它们的长度总是 |V|-1,那么是的,你会有 NP-hardness。但这与您之前提到的问题不同。
    • 对不起,如果我的问题有误。因为我的意思是简单的路径,所以它的长度从 1 限制到 |V|-1,对吧?
    • 确实如此,但如果您无法保证这些路径会报告给您的顺序,您最终可能会花费大部分时间来查看报告的路径并查看如果有长度为 |V|-1。
    【解决方案2】:

    这个问题的复杂度似乎是 O(n!),比 NP-Hard / NP-Complete 系列的 O(2^n) 还要糟糕。此外,这不是 NP-Hard / NP-Complete,因为它甚至不在 NP 中。
    NP的要求:
    “如果一个问题的解可以在多项式时间内被猜测和验证,则该问题称为 NP(非确定性多项式)”[1]
    您的问题不在 NP 中,因为检查解决方案的复杂度为 O(n!),就像计算结果一样,因为在 (n-1)-Simplex(具有 n 个顶点的完全互连图)中[@987654322 @] 所有可能的简单路径的解决方案将是 for(i = {1 to n}){sum(n!/(ni)!)} + 1 用于空集路径(请查看 templatetypedef 的评论[3 ] 用于证明),这是 O(n!),更具体地说,它不属于多项式时间解。
    在上图中[4],您有一个 3 单纯形的示例。
    完整枚举将由 for(i = {1 to 4}){sum(4!/(4-i)!)}+1 = (4!÷3!)+(4!÷2!) +(4!÷1!)+(4!÷0!)+1 = 65 条路径:

    {}
    
    {A}
    {A->B}
    {A->B->C}
    {A->B->D}
    {A->B->C->D}
    {A->B->D->C}
    {A->C}
    {A->C->B}
    {A->C->D}
    {A->C->B->D}
    {A->C->D->B}
    {A->D}
    {A->D->B}
    {A->D->C}
    {A->D->B->C}
    {A->D->C->B}
    
    {B}
    {B->A}
    {B->A->C}
    {B->A->D}
    {B->A->C->D}
    {B->A->D->C}
    {B->C}
    {B->C->A}
    {B->C->D}
    {B->C->A->D}
    {B->C->D->A}
    {B->D}
    {B->D->A}
    {B->D->C}
    {B->D->A->C}
    {B->D->C->A}
    
    {C}
    {C->B}
    {C->B->A}
    {C->B->D}
    {C->B->A->D}
    {C->B->D->A}
    {C->A}
    {C->A->B}
    {C->A->D}
    {C->A->B->D}
    {C->A->D->B}
    {C->D}
    {C->D->B}
    {C->D->A}
    {C->D->B->A}
    {C->D->A->B}
    
    {D}
    {D->B}
    {D->B->C}
    {D->B->A}
    {D->B->C->A}
    {D->B->A->C}
    {D->C}
    {D->C->B}
    {D->C->A}
    {D->C->B->A}
    {D->C->A->B}
    {D->A}
    {D->A->B}
    {D->A->C}
    {D->A->B->C}
    {D->A->C->B}
    

    希望这有助于解决这个问题。

    【讨论】:

    • 你能详细说明复杂度是O(2^n)吗?在一个完整的图中,至少可以有 n!路径。
    • 更具体地说 - 不是剩余路径是“不包含 A”形式的路径,而是它们不是以 A 开头的路径。A 可以出现在其他路径中路径,只是不在前面。这会增加您列出的路径数量。
    • @templatetypedef 你是对的,在不以评论开头...现在修改它。
    • 你确定这是正确的公式吗?有 n 条长度为零的路径,长度为 1 的 n(n-1),长度为 2 的 n(n-1)(n-2),...,和 n!长度为 n-1。重写,即 n = n! / (n-1)!长度为零的路径,n(n-1) = n!/(n-2)!长度为 1 的路径,n(n-1)(n-2) = n!/(n-3)!长度为 2、... 和 n 的路径! = n! / 1!长度为 n-1 的路径。求和给出 n! / 1! + n! /2! + n! /3! + ... + n! / (n-1)! = n!(1/1!+ 1/2!+ ... + 1/(n-1)!),大约是 e * n!。
    猜你喜欢
    • 1970-01-01
    • 2012-01-06
    • 2014-01-27
    • 2016-12-03
    • 2014-01-27
    • 1970-01-01
    • 2011-04-18
    • 2011-08-04
    • 2018-05-29
    相关资源
    最近更新 更多