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练习实例
May 27 Python
python使用rpc框架gRPC的方法
Aug 24 Python
Python3实现取图片中特定的像素替换指定的颜色示例
Jan 24 Python
PyTorch搭建多项式回归模型(三)
May 22 Python
django settings.py 配置文件及介绍
Jul 15 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
Django实现跨域的2种方法
Jul 31 Python
python3用urllib抓取贴吧邮箱和QQ实例
Mar 10 Python
python如何实现图片压缩
Sep 11 Python
python switch 实现多分支选择功能
Dec 21 Python
python uuid生成唯一id或str的最简单案例
Jan 13 Python
Python中zipfile压缩包模块的使用
May 14 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获取MSN好友列表类的实现代码
2013/06/23 PHP
深入apache配置文件httpd.conf的部分参数说明
2013/06/28 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
详解PHP用substr函数截取字符串中的某部分
2016/12/03 PHP
一页面多XMLHttpRequest对象
2007/01/22 Javascript
jQuery中has()方法用法实例
2015/01/06 Javascript
JS实现可拖曳、可关闭的弹窗效果
2015/09/26 Javascript
js获取当前日期时间及其它日期操作汇总
2016/03/08 Javascript
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
微信小程序 toast 详解及实例代码
2016/11/09 Javascript
简单理解js的冒泡排序
2016/12/19 Javascript
jQuery中on方法使用注意事项详解
2017/02/15 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
2017/08/14 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
解决layer.prompt无效的问题
2019/09/24 Javascript
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
2020/04/22 Javascript
从零学Python之入门(四)运算
2014/05/27 Python
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
Python数据预处理之数据规范化(归一化)示例
2019/01/08 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
浅析python中的del用法
2020/09/02 Python
英国殿堂级有机护肤品牌:Rodial
2017/04/17 全球购物
购买一个高级域名:BuyDomains
2018/03/11 全球购物
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
设计师大码女装:11 Honoré
2020/05/03 全球购物
思想品德课教学反思
2014/02/10 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
群众路线四风对照检查材料
2014/11/04 职场文书
2014年乡镇个人工作总结
2014/12/03 职场文书
幼儿园安全教育月活动总结
2015/05/08 职场文书
本科毕业论文致谢怎么写
2015/05/14 职场文书
2019年个人工作总结范文(3篇)
2019/08/27 职场文书
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技