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的函数嵌套的使用方法
Jan 24 Python
使用python 获取进程pid号的方法
Mar 10 Python
Python深度优先算法生成迷宫
Jan 22 Python
python 定义给定初值或长度的list方法
Jun 23 Python
实例讲解Python爬取网页数据
Jul 08 Python
PIL对上传到Django的图片进行处理并保存的实例
Aug 07 Python
对python 树状嵌套结构的实现思路详解
Aug 09 Python
python 图像处理画一个正弦函数代码实例
Sep 10 Python
python实现学生管理系统开发
Jul 24 Python
python 5个实用的技巧
Sep 27 Python
Python和Bash结合在一起的方法
Nov 13 Python
matplotlib部件之套索Lasso的使用
Feb 24 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中cookies使用指南
2007/03/16 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
PHP面向对象详解(三)
2015/12/07 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
php-app开发接口加密详解
2018/04/18 PHP
js ondocumentready onmouseover onclick onmouseout 样式
2010/07/22 Javascript
javascript定时保存表单数据的代码
2011/03/17 Javascript
探讨js中的双感叹号判断
2013/11/11 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
javascript初学者常用技巧
2014/09/02 Javascript
Javascript基础教程之数据类型 (字符串 String)
2015/01/18 Javascript
简述AngularJS相关的一些编程思想
2015/06/23 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
vue router仿天猫底部导航栏功能
2017/10/18 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
2019/03/04 Javascript
node获取客户端ip功能简单示例
2019/08/24 Javascript
微信小程序图片右边加两行文字的代码
2020/04/23 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
TensorFlow 合并/连接数组的方法
2018/07/27 Python
python利用re,bs4,requests模块获取股票数据
2019/07/29 Python
详解python 中in 的 用法
2019/12/12 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
Python填充任意颜色,不同算法时间差异分析说明
2020/05/16 Python
Python接口测试文件上传实例解析
2020/05/22 Python
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
CHARLES & KEITH加拿大官网:新加坡时尚品牌
2020/03/26 全球购物
融资合作协议书范本
2014/10/17 职场文书
新郎新娘致辞
2015/07/31 职场文书
python实现三次密码验证的示例
2021/04/29 Python
微信小程序 根据不同用户切换不同TabBar
2022/04/21 Javascript