什么是NP系列问题?今天来看看这些问题。

1 货郎问题

  • 问题:有n个城市,已知任何两个城市之间的距离,求一条每个城市恰好经过1次的回路,使得总长度最小。

  • 建模与算法:

  1. 输入:有穷个城市的集合C={c1,c2,…,cn},距离d(ci,cj)=d(cj,ci \in Z+ ,1 \leq i \leq j \leq n
  2. 输出:1,2,…,n的排列k1,k2,…,kn,使得:

min{ i = 1 n 1 d ( c k i , c k i + 1 ) + d ( c k n , c k 1 ) {\sum_{i=1}^{n-1} d(c_{k_i},c_{k_{i+1}}) +d(c_{k_{n}},c_{k_1})} i=1n1d(cki,cki+1)+d(ckn,ck1)}

  1. 现状:至今没有找到有效的算法。

2 0-1背包问题

  • 0-1背包问题:有n个物品要装入背包,第i件物品的重量wi,价值vi,i=1,2,…,n。背包最多允许装入的重量是B。问如何选择装入背包的物品,使得总价值达到最大?

举个例子:

n=4, B=6,物品的重量和价值如下:

标号 1 2 3 4
重量 wi 3 4 5 2
价值 vi 7 9 9 2
  • 0-1背包问题数学建模:

问题的解:0-1向量<x1,x2,…,xn>,当xi=1时,代表物品i装入背包。

目标函数:max i = 1 n v i x i {\sum_{i=1}^{n} v_ix_i} i=1nvixi

约束条件: i = 1 n w i x i {\sum_{i=1}^{n} w_ix_i} i=1nwixi \leq B

x i = 0 , 1 i = 1 , 2 . . . . . . n x_i=0,1 。 i=1,2,......,n。 xi=0,1i=1,2......n

0-1背包问题与货郎问题一样,至今没有找到有效的算法来解决。

3 什么是NP-hard问题(NP难问题)

像上面的货郎问题以及0-1背包问题,这样的问题有数千个,大量存在于各个领域。

  • 至今没有找到有效的算法来解决该问题。(没有找到有效的算法意思是现有的算法的运行时间是输入规模的指数或者更高阶函数)
  • 至今没有人能够证明对于这类问题不存在多项式时间的算法。
  • 从是否存在多项式时间算法的角度看,这些问题彼此是等价的。这些问题的难度处于可有效计算的边界。

算法的研究目标主要是下面四点:

而本专栏的主要目标是下图中的下面的算法设计的部分:

我们主要学习的内容是算法分析与问题的计算复杂性,以及分治策略、动态规划、贪心算法、回溯与分支限界等的学习。

学习是漫长的,期待后面将算法知识学好。