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中用于计算对数的log()方法
May 15 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
Jul 09 Python
在Mac上删除自己安装的Python方法
Oct 29 Python
python中break、continue 、exit() 、pass终止循环的区别详解
Jul 08 Python
使用jupyter notebook直接打开.md格式的文件
Apr 10 Python
基于FME使用Python过程图解
May 13 Python
python实现文法左递归的消除方法
May 22 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 Python
用python写爬虫简单吗
Jul 28 Python
python-地图可视化组件folium的操作
Dec 14 Python
完美处理python与anaconda环境变量的冲突问题
Apr 07 Python
使用python创建股票的时间序列可视化分析
Mar 03 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
融入意大利的咖啡文化
2021/03/03 咖啡文化
php面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
PHP提示Notice: Undefined variable的解决办法
2012/11/24 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
php针对cookie操作的队列操作类实例
2014/12/10 PHP
yii添删改查实例
2015/11/16 PHP
tbody元素支持嵌套的注意方法
2007/03/24 Javascript
DOM下的节点属性和操作小结
2009/05/14 Javascript
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
2014/04/20 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
2015/03/16 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
在windows上用nodejs搭建静态文件服务器的简单方法
2016/08/11 NodeJs
jQuery实现火车票买票城市选择切换功能
2017/09/15 jQuery
JS排序算法之希尔排序与快速排序实现方法
2017/12/12 Javascript
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
mocha的时序规则讲解
2019/02/16 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
jQuery实现高级检索功能
2019/05/28 jQuery
vue集成chart.js的实现方法
2019/08/20 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
详解ES6中class的实现原理
2020/10/03 Javascript
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
[00:59]DOTA2背景故事第二期之四大基本法则
2020/07/07 DOTA
详解Python Socket网络编程
2016/01/05 Python
利用Python爬取微博数据生成词云图片实例代码
2017/08/31 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
Python 基于jwt实现认证机制流程解析
2020/06/22 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
普通院校学生的自荐信
2013/11/27 职场文书
四议两公开实施方案
2014/03/28 职场文书
优秀教师单行材料
2014/12/16 职场文书
MySQL 数据类型详情
2021/11/11 MySQL