Math:P问题(多项式时间内可解决)、NP问题(多项式时间内验证)、NPC问题(可通过一个多项式时间算法转换为NP问题)、NP-Hard问题(两不知)的详解与区别之详细攻略

Math:P问题(多项式时间内可解决)、NP问题(多项式时间内验证)、NPC问题(可通过一个多项式时间算法转换为NP问题)、NP-Hard问题(两不知)的详解与区别之详细攻略

导读:昨天与圈内几位数学界的大佬,深度探讨了一下P问题、NP问题、NPC问题、NP-Hard问题之间的联系和区别,聊的很嗨,主要是来比较复杂问题的困难程度,探究是否存在高效算法解决NP问题的可能性,并为复杂问题提供高效近似算法。进一步,帮助我们理解问题的可解性和难解性。
研究P问题和NP问题可以帮助我们了解在可接受的时间内是否存在高效算法来解决某个问题。而NPC问题和NP-Hard问题的研究则对于确定问题的边界和复杂性提供了重要线索。这些理论概念在算法设计、计算复杂性理论以及实际问题的解决中具有广泛的应用
欢大家留言评论,参与探讨与分享……

目录

P问题(多项式时间内可解决)、NP问题(多项式时间内验证)、NPC问题(可通过一个多项式时间算法转换为NP问题)、NP-Hard问题(两不知)的详解与区别


P问题(多项式时间内可解决)、NP问题(多项式时间内验证)、NPC问题(可通过一个多项式时间算法转换为NP问题)、NP-Hard问题(两不知)的详解与区别

问题复杂度

多项式级的复杂度:一种是O(1),O(log(n)),O(na)等,我们把它叫做多项式级的复杂度,因为它的规模n出现在底数的位置;

非多项式级复杂度:另一种是O(an)和O(n!)型复杂度,它是非多项式级的,其复杂度计算机往往不能承受。

当我们在解决一个问题时,我们选择的算法通常都需要是多项式级的复杂度,非多项式级的复杂度需要的时间太多,往往会超时,除非是数据规模非常小。

UDP问题

会不会所有的问题都可以找到复杂度为多项式级的算法呢?很遗憾,答案是否定的。有些问题甚至根本不可能找到一个正确的算法来,这称之为“不可解问题” (Undecidable Decision Problem)。

P类问题

P类问题:P代表可在多项式时间内解决的问题。这些问题的解决方案可以在多项式时间内找到。也就是说,存在一个有效的算法,其运行时间与问题的规模呈多项式关系。

所有可以在多项式时间内求解判定问题构成P类问题。其中判定问题:判断是否有一种能够解决某一类问题的能行算法的研究课题。

如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题(Polynomial)。

哪些问题是P类问题呢?通常NOI和NOIP不会出不属于P类问题的题目。我们常见到的一些信息奥赛的题目都是P问题。道理很简单,一个用穷举换来的非多项式级时间的超时程序不会涵盖任何有价值的算法。

例如,排序和搜索算法都属于P问题;

奥赛的题目都是P问题;

NP类问题

NP类问题(Non-deterministic Polynomial):NP代表非确定性多项式(Nondeterministic Polynomial)。这类问题的解决方案可以在多项式时间内验证,但是找出解决方案的时间复杂度可能是指数级的。

。也就是说,如果我们已经有了一个解决方案,我们可以在多项式时间内验证它的正确性。然而,尚未找到多项式时间复杂度的解决方案。经典的例子是旅行商问题(Traveling Salesman Problem),即找到一条访问所有城市的最短路径。

所有的非确定性多项式时间可解的判定问题构成NP类问题。其中非确定性算法将问题分解成猜测验证两个阶段。算法的猜测阶段是非确定性的,算法的验证阶段是确定性的,它验证猜测阶段给出解的正确性。

NP问题容易理解错误。在这里强调,NP问题不是非P类问题。NP问题是指

>> 可以在多项式的时间里验证一个解的问题。

>> 可以在多项式的时间里猜出一个解的问题。

找一个解很困难,但验证一个解很容易。验证一个解只需要O(n)的时间复杂度,也就是说我可以花O(n)的时间把我猜的路径的长度加出来。

例如旅行商问题、求解线性方程组。

NP=P?可能是这个世纪最重要的数学问题

NPC问题

NPC问题(Non-deterministic Polynomial Complete):如果任何一个NP问题都能通过一个多项式时间算法转换为某个NP问题,那么这个NP问题就称为NPC问题。

NPC代表非确定性多项式完全(Nondeterministic Polynomial Complete)。这是一类特殊的NP问题,被认为是NP问题中最难的问题之一。如果某个问题是NPC问题,那么它满足两个条件:

首先,它是一个NP问题;

其次,任何其他的NP问题都可以通过多项式时间归约(reduction)转换为该问题。

简而言之,NPC问题是NP问题的最困难的子集。著名的例子包括旅行商问题、背包问题(Knapsack Problem)和布尔可满足性问题(Boolean Satisfiability Problem)。

NP中的某些问题的复杂性与整个类的复杂性相关联,这些问题中任何一个如果存在多项式时间的算法,那么所有NP问题都是多项式时间可解的,这些问题被称为NP-完全问题(NPC问题)。

著名的例子包括0-1背包问题、布尔可满足性问题

NP-Hard

NP-Hard问题是一类至少与NPC问题一样困难的问题。它们可以是任何问题,即使没有被证明为NP问题。NP-Hard问题不一定要求在多项式时间内验证解决方案,也没有要求它们本身是NP问题。简单来说,NP-Hard问题是困难问题的一类,并且可以用多项式时间归约转换为任何其他问题

两不知:这类问题目前不知道是否可以在多项式时间内解决,也不知道解的验证是否可以在多项式时间内完成。

图的着色问题

猜你喜欢

转载自blog.csdn.net/qq_41185868/article/details/131447771