货郎问题
问题描述
有n个城市,已知任意两个城市之间的距离,求恰好经过各城市1次的回路,使得总距离最短。
- 输入:
有穷个城市的集合 C = C 1 , C 2 , . . . , C n C={C_1,C_2,..., C_n} C=C1,C2,...,Cn,距离 d ( c i , c j ) = d ( c j , c i ) ∈ Z + , 1 ≤ < i < j ≤ n d(c_i,c_j)=d(c_j,c_i) \in Z^+,1\le <i<j\le n d(ci,cj)=d(cj,ci)∈Z+,1≤<i<j≤n - 解:
1 , 2 , . . . , n 1,2,...,n 1,2,...,n的排列 k 1 , k 2 , . . . , k n k_1,k_2,...,k_n k1,k2,...,kn使得:
m i n ∑ i = 1 n − 1 d ( c k i , c k i + 1 ) + d ( c k n , c k 1 ) min{\sum _{i=1}^{n-1}d(c_{k_i},c_{k_i+1}) + d(c_{k_n},c_{k_1})} mini=1∑n−1d(cki,cki+1)+d(ckn,ck1) - 现状:
至今没有找到有效的算法。
0-1背包
问题描述
有n个物品要装入背包,第i件物品的重量
w
i
w_i
wi价值
v
i
v_i
vi,
i
=
1
,
2
,
.
.
.
,
n
i=1,2,...,n
i=1,2,...,n。背包最多允许装入的重量为
B
B
B,问如何选择装入背包的物品,使得总价值达到最大?
0-1背包问题建模
问题的解:0-1向量
<
x
1
,
x
2
,
.
.
.
,
x
n
>
<x_1,x_2,...,x_n>
<x1,x2,...,xn>
x
i
=
1
x_i=1
xi=1表示→物品i装入背包,因此有
目标函数:
m
a
x
∑
i
=
1
n
v
i
x
i
max \sum_{i=1}^{n}v_ix_i
max∑i=1nvixi
约束条件:
∑
i
i
1
n
w
i
x
i
≤
B
\sum_{ii1}^{n}w_ix_i \le B
∑ii1nwixi≤B
x
i
=
0
,
1
,
i
=
1
,
2
,
.
.
.
,
n
x_i=0,1, i=1,2,...,n
xi=0,1,i=1,2,...,n
NP-hard问题
- 这样的问题有数千个,大量存在于各个应用领域;
- 至今没有找到有效算法:现有算法的运行时间是输入规模的指数或更高阶函数;
- 至今没有人能够证明对于这类问题不存在多项式时间的算法;
- 从是否存在多项式时间算法的角度看,这些问题彼此是等价的。这些问题的难度处于可有效计算的边界。
Algorithm + Data Structure = Programming
好的算法:
- 提高求解问题的效率;
- 节省存储空间;
算法的研究目标:
- 问题→建模并寻找算法;——算法设计技术
- 算法→算法的评价;——算法分析方法
- 算法类→问题复杂度估计;——问题复杂度分析
- 问题类→能够求解的边界。——计算复杂性理论