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的微信聊天机器人示例代码
Mar 03 Python
Python字典操作详细介绍及字典内建方法分享
Jan 04 Python
python实现逆序输出一个数字的示例讲解
Jun 25 Python
利用Pyhton中的requests包进行网页访问测试的方法
Dec 26 Python
Python Numpy库安装与基本操作示例
Jan 08 Python
python多任务及返回值的处理方法
Jan 22 Python
使用Filter过滤python中的日志输出的实现方法
Jul 17 Python
Python基于pygame实现单机版五子棋对战
Dec 26 Python
基于Python获取照片的GPS位置信息
Jan 20 Python
python之MSE、MAE、RMSE的使用
Feb 24 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
Apr 08 Python
python thrift 实现 单端口多服务的过程
Jun 08 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
php 正则表达式小结
2009/08/31 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
详解php中的implements 使用
2017/06/13 PHP
js资料toString 方法
2007/03/13 Javascript
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
vue如何限制只能输入正负数及小数
2019/07/04 Javascript
让python在hadoop上跑起来
2016/01/27 Python
深入理解python对json的操作总结
2017/01/05 Python
详解python 模拟豆瓣登录(豆瓣6.0)
2019/04/18 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
如何使用Cython对python代码进行加密
2020/07/08 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
详解Python中的文件操作
2021/01/14 Python
Python3.9.1中使用match方法详解
2021/02/08 Python
详解纯CSS3制作的20种loading动效
2017/07/05 HTML / CSS
香港时尚女装购物网站:ZAFUL
2017/07/19 全球购物
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
Opodo意大利:欧洲市场上领先的在线旅行社
2019/10/24 全球购物
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
大学毕业生通用求职信
2013/09/28 职场文书
股权转让意向书
2014/04/01 职场文书
文明班级建设方案
2014/05/15 职场文书
英语教研活动总结
2014/07/02 职场文书
婚育证明样本
2015/06/16 职场文书
医院见习总结
2015/06/24 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis
Python自动化工具之实现Excel转Markdown表格
2022/04/08 Python
python playwright之元素定位示例详解
2022/07/23 Python