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验证码识别的方法
Jul 10 Python
windows10系统中安装python3.x+scrapy教程
Nov 08 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
Jan 09 Python
Python实现二维数组输出为图片
Apr 03 Python
Python sorted函数详解(高级篇)
Sep 18 Python
Python selenium的基本使用方法分析
Dec 21 Python
Numpy 理解ndarray对象的示例代码
Apr 03 Python
keras中的loss、optimizer、metrics用法
Jun 15 Python
浅析Python迭代器的高级用法
Jul 16 Python
Python定义一个Actor任务
Jul 29 Python
python 实现单例模式的5种方法
Sep 23 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
Sep 25 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
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
PHP中echo,print_r与var_dump区别分析
2014/09/29 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
php 使用html5实现多文件上传实例
2016/10/24 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
2016/11/25 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
2017/10/24 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
JS中==与===操作符的比较
2009/03/21 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
jQuery EasyUI 获取tabs的实例解析
2016/12/06 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
vue 解决循环引用组件报错的问题
2018/09/06 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
深入Node TCP模块的理解
2019/03/13 Javascript
Angular+ionic实现折叠展开效果的示例代码
2020/07/29 Javascript
[02:41]《西雅图我们来了》2015国际邀请赛出征全记录
2015/07/23 DOTA
[42:32]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.27
2020/12/01 DOTA
Python selenium 三种等待方式解读
2016/09/15 Python
python中redis的安装和使用
2016/12/04 Python
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
pytorch GAN生成对抗网络实例
2020/01/10 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
python pillow库的基础使用教程
2021/01/13 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
性能服装:HYLETE
2018/08/14 全球购物
大学生专科学习生活的自我评价
2013/12/07 职场文书
校园广播稿500字
2014/02/04 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL