货郎问题和计算复杂度

货郎问题

问题描述

有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<jn
  • 解:
    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=1n1d(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 maxi=1nvixi
约束条件: ∑ i i 1 n w i x i ≤ B \sum_{ii1}^{n}w_ix_i \le B ii1nwixiB
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

好的算法:

  • 提高求解问题的效率;
  • 节省存储空间;
    算法的研究目标:
  • 问题→建模并寻找算法;——算法设计技术
  • 算法→算法的评价;——算法分析方法
  • 算法类→问题复杂度估计;——问题复杂度分析
  • 问题类→能够求解的边界。——计算复杂性理论
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值