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中使用PIL模块处理图像的教程
Apr 29 Python
Python中字典的基础知识归纳小结
Aug 19 Python
python万年历实现代码 含运行结果
May 20 Python
python定时利用QQ邮件发送天气预报的实例
Nov 17 Python
Django使用httpresponse返回用户头像实例代码
Jan 26 Python
pandas按若干个列的组合条件筛选数据的方法
Apr 11 Python
PyQt5每天必学之关闭窗口
Apr 19 Python
Django添加sitemap的方法示例
Aug 06 Python
Python中的heapq模块源码详析
Jan 08 Python
Python代码实现http/https代理服务器的脚本
Aug 12 Python
pycharm修改file type方式
Nov 19 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
Feb 18 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
留言板翻页的实现详解
2006/10/09 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
javascript Array对象基础知识小结
2010/11/16 Javascript
JS获取页面input控件中所有text控件并追加样式属性
2013/02/25 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
js实现的xml对象转json功能示例
2016/12/24 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
vue.js删除列表中的一行
2018/06/30 Javascript
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
微信自定义分享链接信息(标题,图片和内容)实现过程详解
2019/09/04 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
2020/12/02 Vue.js
分析Python中解析构建数据知识
2018/01/20 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
Python 批量读取文件中指定字符的实现
2020/03/06 Python
Python环境使用OpenCV检测人脸实现教程
2020/10/19 Python
python 基于DDT实现数据驱动测试
2021/02/18 Python
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
老海军美国官网:Old Navy
2016/09/05 全球购物
找到不普通的东西:Bonanza
2016/10/20 全球购物
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
联想韩国官网:Lenovo Korea
2018/05/10 全球购物
澳大利亚设计的优质鞋类和适合澳大利亚生活方式的服装:Rivers
2019/04/23 全球购物
一份软件工程师的面试试题
2016/02/01 面试题
森林防火标语
2014/06/23 职场文书
2015元旦文艺汇演主持稿(开场白+结束语)
2014/12/14 职场文书
我爱我班主题班会
2015/08/13 职场文书
高中生物教学反思
2016/02/20 职场文书
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers
volatile保证可见性及重排序方法
2022/08/05 Java/Android