是否有任何算法的最佳案例复杂度为n ^ 99的顺序?这个NP完整吗?如果没有,我们如何分析这些算法?
答案 0 :(得分:2)
你必须对你如何表达这个问题要小心。只有问题可以 NP - 完整,而不是算法,所以即使我可以针对最有效的问题设计算法,在时间Θ(n 99 )中运行,算法不会 NP - 完成。
对于 NP - 完成的问题,它必须是决策问题,这是一个输入和输出“是”或“输出”的问题没有。”所以你可以问下面的问题:是否存在任何无法及时解决的决策问题,小于Θ(n 99 ),如果是这样,那么问题是 NP -complete?
有一个名为time hierarchy theorem的结果表明,对于大多数表现良好的函数,有一些决策问题可以在这段时间内解决,但不会比它少得多。特别是,我们可以构建一个可以在时间Θ(n 99 )中求解的决策问题但是在时间O(n 99 / log n)中无法求解,例如。据我所知,我们不知道任何决策问题,其最有效的算法及时运行完全Θ(n 99 ),尽管你可以看到我们可以变得非常接近!
这些问题 NP - 完成吗?好吧,我们不知道!此属性的任何问题都属于 P 类。如果 P = NP ,那么它最终将 NP - 完成并不是因为n 99 < / sup>但因为 P 中的每个问题都是 NP - 完成。*另一方面,如果 P ≠ NP ,那么这个问题不能 NP - 完整,因为没有 NP - 完全问题属于 P 。同样,除了它是多项式之外,这里没有什么特别的关于n 99 。
*从技术上讲,两个平凡问题(“给定输入,0 = 0?”和“给定输入,0 = 1?”)不会 NP < / strong> -complete如果 P = NP 。
答案 1 :(得分:1)
是否有任何算法的最佳案例复杂度为n ^ 99的顺序?
考虑以下算法:
(嗯,这不是一个非常精确的描述,但是你明白了。只需要做99个嵌套循环,这些循环遍历输入,并且最里面的循环打印x
或其他东西。)
这个NP是否完整?
这相当于询问,&#34; P = NP?&#34;。如果你能找到答案,你就会出名。 : - )
答案 2 :(得分:1)
根据定义,具有复杂度N ^ 99的算法是多项式时间,因此在P中。如果你能找到一个NP完全的,你就会证明P = NP,所以我认为不太可能你会发现一个NP完全的。
P vs NP之所以如此有趣的原因之一是在实践中我们遇到的P中的算法自然倾向于具有远小于99的幂。然而,有很多方法可以构造几乎任意复杂的非常人工的算法,所以肯定有复杂度N ^ 99的算法。 (参见例如https://en.wikipedia.org/wiki/Time_hierarchy_theorem或观察到特定大小的电路数量比不同布尔函数的数量增长更慢,因此必须有一些没有特定大小电路的函数)
FWIW Donald Knuth认为P = NP,但是很难找到其指数非常大的算法。参见例如http://www.informit.com/articles/article.aspx?p=2213858中的问题17。这与使用更大指数的更复杂算法并不矛盾:这些算法会做其他事情(事实上,它们可能非常人为)。
答案 3 :(得分:1)
其中一个问题是k-clique问题。
给定一个大小为 n 的图表,是否有任何 k 顶点的集团? ( k 被视为常数)。
一个明显的暴力算法会检查所有 k - 图顶点的子集,并测试它们是否为一个集团。由于( n k ) k -subsets,每个都可以签入( k 2 )时间,总复杂度变为( n k k 2 )或只是( n k )(因为k是常数)。
这个问题的渐近最着名的算法(虽然完全不切实际)在( n 0.792 k )中运行。
通过改变 k ,可以处理任何所需的复杂性。