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 相关文章推荐
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
Apr 23 Python
Python从零开始创建区块链
Mar 06 Python
python入门:这篇文章带你直接学会python
Sep 14 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
Sep 17 Python
Python将一个Excel拆分为多个Excel
Nov 07 Python
Python设计模式之装饰模式实例详解
Jan 21 Python
Django异步任务之Celery的基本使用
Mar 23 Python
python实现数据清洗(缺失值与异常值处理)
Dec 02 Python
python飞机大战 pygame游戏创建快速入门详解
Dec 17 Python
python matplotlib绘制三维图的示例
Sep 24 Python
利用python为PostgreSQL的表自动添加分区
Jan 18 Python
OpenCV-Python实现人脸磨皮算法
Jun 07 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 similar_text 字符串的相似性比较函数
2010/05/26 PHP
php读取纯真ip数据库使用示例
2014/01/26 PHP
PHP内置加密函数详解
2016/11/20 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
2018/12/21 PHP
MSN消息提示类
2006/09/05 Javascript
jQuery帮助之CSS尺寸(五)outerHeight、outerWidth
2009/11/14 Javascript
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
自己封装的javascript事件队列函数版
2014/06/12 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
基于jQuery实现搜索关键字自动匹配功能
2020/03/26 Javascript
js操作table元素实现表格行列新增、删除技巧总结
2015/11/18 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
es6新特性之 class 基本用法解析
2018/05/05 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
微信小程序实现提交input信息到后台的方法示例
2019/01/19 Javascript
layui table动态表头 改变表格头部 重新加载表格的方法
2019/09/21 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
vue组件入门知识全梳理
2020/09/21 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
[56:29]Secret vs Optic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
R vs. Python 数据分析中谁与争锋?
2017/10/18 Python
python编程嵌套函数实例代码
2018/02/11 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
2018/09/04 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
python读取ini配置文件过程示范
2019/12/23 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
python中如何进行连乘计算
2020/05/28 Python
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
仓库理货员岗位职责
2013/12/18 职场文书
怎么写自荐书范文
2014/02/12 职场文书
模范教师事迹材料
2014/12/16 职场文书
世界水日宣传活动总结
2015/02/09 职场文书
5.12护士节活动总结
2015/02/10 职场文书