P问题和NP问题

时间复杂度

  • 时间复杂度并不是表示一个程序解决问题需要花费的时间,而是当问题规模扩大以后,程序需要的时间长度增长的有多快。也就是说,对于高速处理数据的计算机来说,处理某一特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的和规模变大之后程序效率的变化。时间复杂度可以分为两种,如图1

P问题和NP问题

  • 多项式级复杂度的规模n出现在底数的位置,而非多项式级的复杂度往往出现在指数的位置或者是以阶乘的方式出现的。
  • 当我们在解决一个问题的时候,我们选择的算法通常是多项式级复杂度的,非多项式的复杂度需要的时间太多,往往会超时。

P问题

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

NP问题

  • NP问题并不是非P类问题!NP问题是指可以在多项式的时间里验证一个解的问题。

举例

  • 著名的TSP(旅行家推销问题):即有一个推销员,要到n个城市推销商品,他要找出一条包含这n个城市的环路,这个环路路径小于a。我们知道这个问题如果单纯的用枚举法来列举的话会有(n-1)!种,已经不是多项式级时间的算法。那么我们假设猜几次就猜中了一条小于a的路径,那么这属于NP问题。如果我们能在多项式时间内验证并得到所有的解,那么这就是一个P问题