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 字符串中的字符倒转
Sep 06 Python
python根据路径导入模块的方法
Sep 30 Python
Python基本语法经典教程
Mar 11 Python
Python简单生成8位随机密码的方法
May 24 Python
python一键去抖音视频水印工具
Sep 14 Python
Python数据类型之Number数字操作实例详解
May 08 Python
Pyqt5 基本界面组件之inputDialog的使用
Jun 25 Python
TensorFlow实现简单的CNN的方法
Jul 18 Python
python字符串格式化方式解析
Oct 19 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
Apr 15 Python
pyqt5打包成exe可执行文件的方法
May 14 Python
Python音乐爬虫完美绕过反爬
Aug 30 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
2015/11/18 PHP
Yii框架学习笔记之session与cookie简单操作示例
2019/04/30 PHP
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
基于jquery的拖动布局插件
2011/11/25 Javascript
JavaScript中创建对象和继承示例解读
2014/02/12 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
2014/10/16 Javascript
javascript比较两个日期的先后示例代码
2014/12/31 Javascript
jQuery ajax MD5实现用户注册即时验证功能
2016/10/11 Javascript
Angularjs中ng-repeat-start与ng-repeat-end的用法实例介绍
2016/12/31 Javascript
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
微信小程序使用Promise简化回调
2018/02/06 Javascript
mock.js实现模拟生成假数据功能示例
2019/01/15 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
WEEX环境搭建与入门详解
2019/10/16 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
Python中is与==判断的区别
2017/03/28 Python
Python+tkinter模拟“记住我”自动登录实例代码
2018/01/16 Python
pycharm: 恢复(reset) 误删文件的方法
2018/10/22 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
基于python爬取梨视频实现过程解析
2020/11/09 Python
用python获取txt文件中关键字的数量
2020/12/24 Python
Mamaearth官方网站:印度母婴护理产品公司
2019/10/06 全球购物
高分子材料与工程专业个人求职信
2013/12/15 职场文书
中级会计职业生涯规划范文
2014/01/16 职场文书
企业宣传工作方案
2014/06/02 职场文书
支部书记四风问题对照检查材料
2014/10/04 职场文书
大学生就业协议书范本(适用于公司企业)
2014/10/07 职场文书
整改落实自查报告
2014/11/05 职场文书
可怜妈妈观后感
2015/06/09 职场文书
小学主题班会教案
2015/08/17 职场文书
图文详解nginx日志切割的实现
2022/01/18 Servers
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python