【问题标题】:Classification and complexity of generating all possible combinations: P, NP, NP-Complete or NP-Hard生成所有可能组合的分类和复杂性:P、NP、NP-Complete 或 NP-Hard
【发布时间】:2020-10-20 04:04:32
【问题描述】:

算法需要从给定的列表中生成所有可能的组合(空集除外)。

list          =>         [1, 2, 3]
combinations  =>         [{1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}]

该算法将花费 O(2n) 时间复杂度来生成所有组合。但是,我不确定改进的算法是否可以降低这种时间复杂度。如果存在改进的算法,请分享您的知识!

如果它采用指数 O(2n),我想了解一下该算法属于 P、NP、NP-Complete 或 NP-Hard 的哪个类。在此先感谢:)

【问题讨论】:

  • 如果代码的目标是生成所有可能组合的列表,那么不可能比 O(2^n) 做得更好。算法的复杂度永远不会小于输出的大小。

标签: algorithm time-complexity p-np


【解决方案1】:

P、NP、NP-complete 和 NP-hard 都是决策问题的类别,它们都不包含涉及非二进制输出的问题(例如这个枚举问题)。

人们通常将FNP 中的问题称为 NP 中的问题。这个问题也不在 FNP 中,因为关系的输出字符串的长度必须受输入长度的某个多项式函数的限制。它可能是 FNP 难的,但我们正在陷入连研究生 CS 教育都无法涵盖的杂草之中。如果您足够关心,值得在 CS Stack Exchange 上询问。

【讨论】:

    【解决方案2】:

    除了可以说是 NP-hard 之外,其他任何一个都没有这个问题。

    它不在 P 中,因为没有多项式时间算法可以做到这一点。您不能在多项式时间内生成指数数量的事物。

    它不在 NP 中,因为没有多项式时间算法来验证答案。您无法在多项式时间内处理指数数量的事物。

    它不是 NP-complete 的,因为 NP-complete 中的所有东西都必须是 NP 的,而它不是。

    它在 NP-hard 中的论点是这样的。你可以对空集的成员说任何你想要的东西。包括它们让猴子从你的鼻子里飞出来,并且可以在多项式时间内解决 NP 中的任何问题。所以如果我们能找到一个多项式解,我们就可以快速解决任何 NP 问题,因此它满足 NP-hard 的定义。但没用 - 我们知道不存在多项式解决方案。

    【讨论】:

    • 我认为最后一点是不正确的。即使我们暂时忽略 NP-hard 所涉及的决策问题,对于问题中描述的问题的 O(1) 预言也不会对多项式解决 NP 问题有任何帮助。
    • @ADdV O(1) 预言机也无助于让猴子飞出你的鼻子。关键是你可以对空集的成员说任何你想要的。
    • 当然,我的观点是,当且仅当带有预言机的预言机机器可以在多项式时间内解决 NP 中的任何问题时,问题才是 NP 难的。 NP 硬度的定义中没有涉及猴子和鼻子。
    猜你喜欢
    • 1970-01-01
    • 2012-01-06
    • 2014-01-27
    • 2014-01-27
    • 2011-04-18
    • 2011-04-09
    • 2012-11-30
    • 2020-10-16
    • 2018-05-29
    相关资源
    最近更新 更多