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 06 Python
详解Python文本操作相关模块
Jun 22 Python
python判断字符串是否是json格式方法分享
Nov 07 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
Nov 15 Python
python广度优先搜索得到两点间最短路径
Jan 17 Python
将Python文件打包成.EXE可执行文件的方法
Aug 11 Python
Python定时任务随机时间执行的实现方法
Aug 14 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
Aug 27 Python
python爬虫爬取监控教务系统的思路详解
Jan 08 Python
文件上传服务器-jupyter 中python解压及压缩方式
Apr 22 Python
python使用Word2Vec进行情感分析解析
Jul 31 Python
教你怎么用Python selenium操作浏览器对象的基础API
Jun 23 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 多维数组排序(usort,uasort)
2010/06/30 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
2014/04/24 PHP
基于PHP的简单采集数据入库程序
2014/07/30 PHP
laravel ORM关联关系中的 with和whereHas用法
2019/10/16 PHP
JS日历 推荐
2006/12/03 Javascript
Javascript之文件操作
2007/03/07 Javascript
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
jqgrid 编辑添加功能详细解析
2013/11/08 Javascript
javascript制作的网页侧边弹出框思路及实现代码
2014/05/21 Javascript
jquery中$(#form :input)与$(#form input)的区别
2014/08/18 Javascript
JS函数this的用法实例分析
2015/02/05 Javascript
jQuery+jRange实现滑动选取数值范围特效
2015/03/14 Javascript
基于js 本地存储(详解)
2017/08/16 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
vue 之 .sync 修饰符示例详解
2018/04/21 Javascript
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
[01:14]英雄,所敬略同——2018完美盛典宣传视频4K
2018/12/05 DOTA
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
Python正则抓取网易新闻的方法示例
2017/04/21 Python
python邮件发送smtplib使用详解
2020/06/16 Python
python框架中flask知识点总结
2018/08/17 Python
keras使用Sequence类调用大规模数据集进行训练的实现
2020/06/22 Python
css3和jquery实现自定义checkbox和radiobox组件
2014/04/22 HTML / CSS
检测浏览器对HTML5和CSS3支持度的方法
2015/06/25 HTML / CSS
俄语翻译实习生的自我评价分享
2013/11/06 职场文书
初三学生个人自我评定
2014/04/06 职场文书
学校运动会霸气口号
2014/06/07 职场文书
基层党员对照检查材料
2014/08/25 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL
详解Apache SkyWalking 告警配置指南
2021/04/22 Servers
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js