著名的P=NP问题到底是什么

简介: 对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行时间是否还是一样,或者也跟着慢了数百倍,或者变慢了数万倍。

你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。这或许是众多OIer最大的误区之一。你要知道,大多数人此时所说的NP问题其实都是指的NPC问题。他们没有搞清楚NP问题和NPC问题的概念。NP问题并不是那种“只有搜才行”的问题,NPC问题才是。

好,行了,基本上这个误解已经被澄清了。下面的内容都是在讲什么是P问题,什么是NP问题,什么是NPC问题,你如果不是很感兴趣就可以不看了。接下来你可以看到,把NP问题当成是 NPC问题是一个多大的错误。

还是先用几句话简单说明一下时间复杂度。时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。

也就是说,对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行时间是否还是一样,或者也跟着慢了数百倍,或者变慢了数万倍。

不管数据有多大,程序处理花的时间始终是那么多的,我们就说这个程序很好,具有O(1)的时间复杂度,也称常数级复杂度;数据规模变得有多大,花的时间也跟着变得有多长,这个程序的时间复杂度就是O(n),比如找n个数中的最大值;而像冒泡排序、插入排序等,数据扩大2倍,时间变慢4倍的,属于O(n^2)的复杂度。

还有一些穷举类的算法,所需时间长度成几何阶数上涨,这就是O(a^n)的指数级复杂度,甚至O(n!)的阶乘级复杂度。不会存在O(2*n^2)的复杂度,因为前面的那个“2”是系数,根本不会影响到整个程序的时间增长。同样地,O (n^3+n^2)的复杂度也就是O(n^3)的复杂度。

因此,我们会说,一个O(0.01n^3)的程序的效率比O(100n^2)的效率低,尽管在n很小的时候,前者优于后者,但后者时间随数据规模增长得慢,最终O(n^3)的复杂度将远远超过O(n^2)。我们也说,O(n^100)的复杂度小于O(1.01^n)的复杂度。

相关文章
|
20天前
|
机器学习/深度学习 算法 TensorFlow
TensorFlow Probability 超厉害!带你探索贝叶斯方法与概率编程,开启数据科学新征程!
【8月更文挑战第31天】TensorFlow Probability是基于TensorFlow的一个强大库,专攻概率建模与推断,融合深度学习力量与概率方法灵活性,便于构建复杂概率模型并高效推断。它提供了概率分布、贝叶斯推断等工具,支持不确定性量化与决策,尤其适合数据有限情况。通过示例代码展示了如何构建贝叶斯线性回归模型,体现了其在处理不确定性方面的优势。
25 0
|
1月前
|
机器学习/深度学习 算法
【机器学习】P问题、NP问题、NP-hard、NP-C问题解析与举例理解
本文解析了P问题、NP问题、NP-hard问题以及NP-Complete问题的概念,并通过实例帮助理解NP问题的特点和复杂性。
95 1
|
4月前
|
Python
Scipy 高级教程——解决偏微分方程
Scipy 高级教程——解决偏微分方程【1月更文挑战第12篇】
191 0
Scipy 高级教程——解决偏微分方程
|
4月前
|
机器学习/深度学习 算法 数据挖掘
精通 NumPy 数值分析:1~5
精通 NumPy 数值分析:1~5
101 0
|
4月前
|
存储 算法 数据挖掘
精通 NumPy 数值分析:6~10
精通 NumPy 数值分析:6~10
83 0
|
机器学习/深度学习 编解码 计算机视觉
详细解读Google新作 | 教你How to train自己的Transfomer模型?
详细解读Google新作 | 教你How to train自己的Transfomer模型?
183 0
|
存储 Python
每个数据科学家都应该知道的20个NumPy操作
每个数据科学家都应该知道的20个NumPy操作
99 0
每个数据科学家都应该知道的20个NumPy操作
|
Python
全方位剖析Numpy中的np.diag源代码
全方位剖析Numpy中的np.diag源代码
|
机器学习/深度学习 Python
【深度学习】numpy.dot(a, b)点乘运算
今天学习 python 里的 numpy 库里的 dot 方法,花了点功夫。
272 0
【深度学习】numpy.dot(a, b)点乘运算
|
人工智能 算法 程序员
AI数学基础之:P、NP、NPC问题
AI数学基础之:P、NP、NPC问题
AI数学基础之:P、NP、NPC问题