代码实现(python)

#-*- coding:utf-8 -*-

from copy import copy

def add(p,x,c): #对应元素分别相加,p中每个元素都是元组,x也是一个元组

resultlist=[(i[0]+x[0],i[1]+x[1]) for i in p if i[0]+x[0]<=c]

return resultlist

def union(p,q): #求并集,同时删除坏点

pp=copy(p)

qq=copy(q)

delelement=[]

for i in pp:

for j in qq:

if(i[0]>=j[0] and i[1]<=j[1]):

delelement.append(i)

break

if(i[0]<=j[0] and i[1]>=j[1]):

delelement.append(j)

break

for i in delelement:

if i in pp:

pp.remove(i)

else:

qq.remove(i)

qq.extend(pp)

qq.sort()

return qq

def package2(w,v,c,n):#动态规划主函数

p=[[]]*(n+2)

p[n+1]=[(0,0)]

q= [[]] * (n + 2)

for i in range(n+1,1,-1):

q[i]=add(p[i],(w[i-2],v[i-2]),c)

p[i-1] = union(p[i], q[i])

return p,q

def out(w,v,p,q,n):   #构造最优解

maxpoint=p[1][-1]

choose=[]

for i in range(1,n+1):

if((maxpoint in q[i+1]) and (maxpoint not in p[i+1])):

choose.append(True)

maxpoint=(maxpoint[0]-w[i-1],maxpoint[1]-v[i-1])

else:

choose.append(False)

print 'max weight and value:', p[1][-1]

print 'choose or not:', choose

if __name__=='__main__':

w=[2,2,6,5,4]

v=[6,3,5,4,6]

p,q=package2(w, v, 10, 5)

out(w,v,p,q,5)

结果输出:

max weight and value: (8, 15)

choose or not: [True, True, False, False, True]

复杂度分析

从之前的分析过程可以看出,每一个物品都存在选或者不选,如果没有删除坏点,

则要计算的转折点个数为2^n个,即指数级的,但是正是因为中间过程删除了很多

的坏点,因此实际复杂度并不是很高。

和前一篇最直接的动态规划相比,如果背包容量和物品重量的量级相差不大而

物品选择很多时,用直接动态规划方法效果可能更好。

而如果出现入本文开头引入的情况,即背包容量量级很大,而可选物品很少时,

用优化算法要快很多。因此,具体哪种好要视情况而定。

因为博客园编辑公式不太方便,因此写好了文档再截屏的。 以上内容为原创,希望能帮到大家。

转载于:https://www.cnblogs.com/xiaotan-code/p/6674902.html

0-1背包问题优化算法详解相关推荐

  1. id3算法c语言实现,从ID3到C5.0的故事:算法详解及实践应用

    原标题:从ID3到C5.0的故事:算法详解及实践应用 在前面,我们分别概述性地介绍了决策树的基本知识: 1.算法概述 ID3(Iterative Dichotomiser3)算法可以说决策树算法中最著 ...

  2. 机器学习、深度学习中常用的优化算法详解——梯度下降法、牛顿法、共轭梯度法

    一.梯度下降法 1.总述: 在机器学习中,基于基本的梯度下降法发展了三种梯度下降方法,分别为随机梯度下降法,批量梯度下降法以及小批量梯度下降法. (1)批量梯度下降法(Batch Gradient D ...

  3. 【机器学习基础】优化算法详解

    本文来源于吴恩达老师的深度学习课程[1]和深度学习课程[2]笔记部分. 作者:黄海广[3] 备注:笔记和作业(含数据.原始作业文件).视频都在 github[4]中下载. 导语 在学习机器学习的过程中 ...

  4. Adam 优化算法详解

    据牛津字典的定义,优化是指最好或最有效地利用一种情况或资源,或者简单地使自己的事物达到最佳状态的行为. 通常,如果可以对某事进行数学建模,则很有可能可以对其进行优化. 这在深度学习领域起着至关重要的作 ...

  5. 差分分组的合作协同进化的大规模优化算法详解

    合作协同进化已经引入协同进化算法,目的是通过分而治之的范式解决日益复杂的优化问题.理论上,协同改 变子成分的想法是十分适合解决大规模优化问题的.然而在实践中,没有关于问题的先验知识, 问题应如何分解是 ...

  6. 重叠时间段问题优化算法详解

    目录 一.问题提出 1. 描述 2. 分析 二.优化重叠查询 1. 自关联 2. 游标+内存临时表 三.改进取得活跃时段的算法 1. 最小范围算法(表连接) 2. 正负计数器算法(一次扫描) 四.My ...

  7. 深度学习中的Adam优化算法详解

    Adam论文:https://arxiv.org/pdf/1412.6980.pdf (一).什么是Adam算法? Adam(Adaptive momentum)是一种自适应动量的随机优化方法(A m ...

  8. 基础排序算法详解与优化

    文章图片存储在GitHub,网速不佳的朋友,请看<基础排序算法详解与优化> 或者 来我的技术小站 godbmw.com 1. 谈谈基础排序 常见的基础排序有选择排序.冒泡排序和插入排序.众 ...

  9. Apollo6.0代码Lattice算法详解——Part5: 生成横纵向轨迹

    Apollo6.0代码Lattice算法详解--Part5: 生成横纵向轨迹 0.前置知识 1.涉及主要函数 2.函数关系 3.部分函数代码详解 3.1 lattice_planner.cc中代码部分 ...

最新文章

  1. 电源上的sense什么意思_冷知识:电源开关上的这两个标识有什么含义?
  2. python编程语言是什么-Python是一种什么样的编程语言?解释?编译?汇编?机械?...
  3. web.xml 配置中classpath: 与classpath*:的区别
  4. 如何做一名优秀的博士生--施一公教授
  5. boost::process::system相关的测试程序
  6. python做成绩表_自学Python笔记:用Python做成绩分析(2)
  7. SSDT Hook的妙用-对抗ring0 inline hook
  8. Zookeeper--ZAB与Paxos算法联系与区别
  9. JavWeb笔记:JavaScript总结
  10. M1芯片Mac也可以安装Windows系统啦 使用PD16虚拟机安装ARM版Windows10教程
  11. 关于大型asp.net应用系统的架构—如何做到高性能高可伸缩性
  12. Go语言struct{}类型的channel
  13. java 调用三角函数_Java中的三角函数方法
  14. 百度网盘分享旁边的个人说明如何修改
  15. 同济大学软件学院特聘教授朱少民谈《测试,从哪里来,到哪里去》
  16. HALCON图像格式
  17. 5.8GHz雷达感应模块应用,智能家居照明技术,微波雷达传感器
  18. 成为一名合格的算法工程师需要掌握哪些技能?
  19. PHA挖kuang什么时候开始?
  20. 机器学习笔记-多分类下的召回率和F值

热门文章

  1. BZOJ 3990: [SDOI2015]排序(搜索+剪枝)
  2. Linux下MySql插入汉字报错解决(/etc/my.cnf不存在)
  3. 查看apache连接数及apache工作原理
  4. JAVA基础知识(6)
  5. Reading Club week 3 prepare document
  6. 避免资源放在收藏夹里面吃灰的方法(如从typora上直接能导出html并且无缝连接到微信公众号的神奇网站)
  7. Google colab基本页面layout和需要注意的地方!
  8. 委瑞内拉遭网络攻击全国停电,他们可能忽视哪些安全威胁?...
  9. 谈论linux同组多用户操作问题
  10. 爪哇国新游记之三十一----日期时间与字符串间的转化