时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。
也就是说,对于高速处理数据的计算机来说,处理某一个特定数据的效率并不能衡量一个程序的好坏,而是应当看当数据规模变大到数百倍后,程序运行时间是否还是一样,或者也跟着变慢了数百倍,或者变慢了数万倍。
以上几类复杂度被分为两种级别,其中后者的复杂度无论如何都远远大于前者。
当我们选择一个问题时,选择的算法通常都是多项式级别的复杂度,非多项式级别的复杂度需要的时间太多,往往会超时,除非是数据规模非常小。
有些问题找不到复杂度为多项式级的算法,称为“不可解问题”(Undecidable Decision Problem)。
Hamiton回路:给你一个图,能否找到一条经过每个顶点一次且恰好一次,最后又走回去的路。这个问题就没有找到多项式级的算法。
如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题属于P问题。P是英文单词多项式的第一个字母。
NP问题不是非P类问题。
NP问题指可以在多项式的时间里验证一个解的问题/可以在多项式的世界里猜出一个解的问题。
当然也有不是NP问题的问题,你猜到了解但是没用,因为不能在多项式的时间里去验证它。
**所有的P类问题都是NP问题。**也就是说,能多项式解决一个问题,必然能多项式地验证一个问题的解。
但人们普遍相信,存在一个不可能有多项式级复杂度的算法的NP问题。
约化
一个问题A可以约化为问题B的含义是:可以用问题B的解法解决问题A。
但B的时间复杂度一定要高于或者等于A的时间复杂度。
约化具有传递性:问题A可以约化为问题B,问题B可以约化为问题C,问题A可以约化为问题C。
**约化的标准概念:**如果能找到一个变化法则,对任意一个程序A的输入,都能按这个法则变换成程序B的输入,使两程序的输出相同,那么可以说,问题A可以约化为问题B。
NPC问题定义
证明一个问题是NPC问题
既然所有的NP问题都能约化成NPC问题,那么只要任意一个NPC问题找到了一个多项式的算法,那么所有的NP问题都能用这个算法解决了,NP就等于P了。
但目前NPC问题没呀多项式的有效算法,只能用指数级甚至阶级乘复杂度的搜索。
NP-Hard问题满足NPC问题定义的第二条,但不满足第一条。
上一篇:流形上的预积分(中)
下一篇:项目计划要趁早