python基于递归解决背包问题详解


Posted in Python onJuly 03, 2019

递归是个好东西,任何具有递归性质的问题通过函数递归调用会变得很简单。一个很复杂的问题,几行代码就能搞定。

  最简单的递归问题:现有重量为weight的包,有若干重量分别为W1,W2.....Wn的物品,试问能否从物品中选出若干件而且重量刚好为weight?

  weight具体是怎么构成的,有下面两种情况(假设挑选到Wn时,刚好够weight):

  1. 从Wn-1开始就已经够weight,那weight=W1+W2+......+Wn=W1+W2+......+Wn-1.

  2.加上Wn后刚好够weight,那自然地有weight=W1+W2+......+Wn.

  上面两种情况一个有解,那问题就有解,于是我们可以把Wi从背包去掉倒退回去看weight的值。

  经过一系列倒推,weight的值有下面三种情况:

  1. weight刚刚等于0 //说明有解

  2. weight<0 //不可能,所以无解

  3. weight>0 and 没有W了 // 也不可能,无解

def knap(weight,weights,n): //weight为包的容量,weights是一个所有重量的表,n为重量数量
    if weight==0:
     return True;
    if weight<0 or (n<1 and weight>0):
     return False;
    if knap(weight-weights[n-1],weights,n-1): //情况 2
     print(weights[n-1])
     return True
    if knap(weight,weights,n-1): //情况 1
     return True
    else:
     return False

超级简单吧!!!如果采用动态规划解决,几十行代码要吧。这就12行代码,简单明了!!!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中模块查找的原理与方法详解
Aug 11 Python
Python及Django框架生成二维码的方法分析
Jan 31 Python
PyQt5每天必学之工具提示功能
Apr 19 Python
Python2 Selenium元素定位的实现(8种)
Feb 25 Python
Django中Middleware中的函数详解
Jul 18 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
Aug 12 Python
Django之编辑时根据条件跳转回原页面的方法
Aug 21 Python
pygame实现非图片按钮效果
Oct 29 Python
python分布式计算dispy的使用详解
Dec 22 Python
Python numpy矩阵处理运算工具用法汇总
Jul 13 Python
python使用建议与技巧分享(二)
Aug 17 Python
Jmeter调用Python脚本实现参数互相传递的实现
Jan 22 Python
Python跳出多重循环的方法示例
Jul 03 #Python
Python多版本开发环境管理工具介绍
Jul 03 #Python
介绍一款python类型检查工具pyright(推荐)
Jul 03 #Python
Python flask框架post接口调用示例
Jul 03 #Python
Python3安装psycopy2以及遇到问题解决方法
Jul 03 #Python
python调试神器PySnooper的使用
Jul 03 #Python
详解DeBug Python神级工具PySnooper
Jul 03 #Python
You might like
加强版phplib的DB类
2008/03/31 PHP
ThinkPHP关联模型操作实例分析
2012/09/23 PHP
php使用glob函数快速查询指定目录文件的方法
2014/11/15 PHP
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
33个优秀的 jQuery 图片展示插件分享
2012/03/14 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
2020/08/11 Javascript
jQuery对象与DOM对象之间的相互转换
2015/03/03 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
2015/03/10 Javascript
JavaScript中的立即执行函数表达式介绍
2015/03/15 Javascript
jQuery实现拖拽效果插件的方法
2015/03/23 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
2016/01/23 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
vue v-for 使用问题整理小结
2019/08/04 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
[13:39]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第一场
2014/05/26 DOTA
python3音乐播放器简单实现代码
2020/04/20 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
python虚拟环境完美部署教程
2019/08/06 Python
在pycharm中显示python画的图方法
2019/08/31 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
pytorch快速搭建神经网络_Sequential操作
2020/06/17 Python
blueseventy官网:铁人三项和比赛泳衣
2021/02/06 全球购物
小班秋游活动方案
2014/02/22 职场文书
煤矿安全协议书
2014/08/20 职场文书
2014单位领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
雨中的树观后感
2015/06/03 职场文书
2016年安全月活动总结
2016/04/06 职场文书
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python
WinServer2012搭建DNS服务器的方法步骤
2022/06/10 Servers
javascript中Set、Map、WeakSet、WeakMap区别
2022/12/24 Javascript