蛮力法 ----- 背包问题(Knapsack Problem)

1.问题描述:

有n 个物品,它们有各自的重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?(物体不可以拆分,装就必须装完整的。)

Given n items of known weights w 1 , w 2 , . . . , w n and values v 1 , v 2 , . . . , v n and a knapsack of capacity W,
find the most valuable subset of the items that fit into the knapsack.

2.解决办法

最简单的方式就是把所有拿商品的方式都列出来,最后再做判断此方法是否满足装包条件,并且通过比较和记录找出最优解和解组成(如果满足则记录此时的价值和装的方式,当下一次的装法优于这次,则更新记录,如此下去到最后便会找到最优解,同时解组成也找到);
    The exhaustive-search approach to this problem leads to generating all the subsets of the set of n items given, computing the total weight of each subset in order to identify feasible subsets(i.e., the ones with the total weight not exceeding the knapsack capacity), and finding a subset of the largest value among them.

3.例子

W = 10(背包的总容量)

4个物体:weight分别为7, 3, 4, 5;value分别是:42, 12 , 40 , 25;

经过计算,列举出了所有的可能情况,经过计算和比较,选取3.4两个物体的总价值max是65;即为答案

4.时间复杂度分析

 n件商品,共有n(n-1)/2种可能,故蛮力法的效率是指数级别的,可见效率很低;

 蛮力法效率低不建议采取,但可以用于检验小规模的动态规划解背包问题的正确性和可行性,如下图输出可见,解01背包问题用动态规划是可行的:

Since the number of subsets of an n-element set is 2^n , the exhaustive search leads to a O(2^n) algorithm, no matter how efficiently individual subsets are generated.

背包问题(Knapsack Problem) ----- 蛮力法相关推荐

  1. JavaScript实现Knapsack problem背包问题算法(附完整源码)

    JavaScript实现Knapsack problem背包问题算法(附完整源码) Comparator.js完整源代码 Sort.js完整源代码 MergeSort.js完整源代码 Knapsack ...

  2. 动态规划法(四)0-1背包问题(0-1 Knapsack Problem)

      继续讲故事~~   转眼我们的主人公丁丁就要离开自己的家乡,去大城市见世面了.这天晚上,妈妈正在耐心地帮丁丁收拾行李.家里有个最大能承受20kg的袋子,可是妈妈却有很多东西想装袋子里,已知行李的编 ...

  3. 0/1背包问题(蛮力法)

    问题描述: 给定n个重量为{w1,w2,w3,....,wn}.价值为{v1,v2,v3,...,vn}的物品和一个容量为C的背包,0/1背包问题是求解这些物品中的一个最有价值的子集,并且要能够装到背 ...

  4. Dynamic Programming 01 —knapsack problem(动态规划背包问题)

    首先引入动态变化的含义:为什么要有动态规划? Introduction: 从斐波那契函数的递归中我们发现,在例子求fib(7)的过程中,我们需求得fib(5)和fib(6),而我们在求fib(6)的时 ...

  5. C#,背包问题(Knapsack Problem)贪心算法的源代码

    背包问题(KnapSack Problem)的相关算法是常用的规划算法. 一.什么是背包问题? 背包的问题是,你有一个"袋子",可以装有限数量的物品,鉴于你有一组物品可以从每个物品 ...

  6. Python多维约束(重量+体积+次数)背包问题(Knapsack Problem)

    问题描述:1.一个背包,往里装东西,物品重量w(weight)对应为[2,3,4,7] ,价值va(value)对应为[1,4,7,12] ,如果你的最大承重为20,每个物品可装次数不限,求你能装入背 ...

  7. 【算法设计zxd】第四章蛮力法 1.枚举法 02穷举查找

    目录 蛮力法(brute force): [例4-1]链环数字对  问题分析  计算模型 pair_digital(int n): 代码: [例4-2]解数字迷: 思考题:ACM预测:​ 问题分析 ...

  8. 算法分析与设计——蛮力法0/1背包

    蛮力法0/1背包 蛮力法 蛮力法是一种简单直接解决问题的方法,常常直接基于问题的描述,所以蛮力法也是最容易应用的方法. 蛮力法所依赖 的基本技术是遍历,即采用一定的策略依次处理待求解问题的所有元素,从 ...

  9. 蛮力法求最大字段和时间复杂度_蛮力法

    蛮力法的主要思想就是用最简单的思路解决问题,一般性能不好,但仍然很重要. 理论上蛮力法可以解决可计算领域的各种问题 蛮力法解决较小规模问题是可接受的,如果设计一个更高效算法代价不值得 蛮力法可以作为时 ...

  10. 小黄的刷题之路(十六)——五行魔法(枚举/蛮力法)

    文章目录 一.题目 二.分析思路 2.1 审题理解 2.2 思路 三.代码实现 3.1. C++实现 四.总结 一.题目 二.分析思路 2.1 审题理解 每一块五行石都有金木水火土五种能量(0表示没有 ...

最新文章

  1. 信息系统项目管理师笔记(信息系统篇)第一讲
  2. Trie树详解及其应用
  3. Java ---- 序列化
  4. python合并列表并按升序排序_在python中按升序合并两个排序的链接列表:单链接列表指针更新问题...
  5. VS2010发布、打包安装程序超全超详细
  6. Ubuntu 安装 Cassandra 数据库
  7. python骗局-1.python真的是万恶之源么?(初识python)
  8. Android基础知识、四大组件(转)
  9. java程序中,如何设置周一为一周的开始?如何设置周一为一周的第一天? 或者说,如何理解java的setFirstDayOfWeek()方法?
  10. 10大城市硬科技指数发布,“硬科技+在大西安”高峰论坛圆满落幕
  11. 中国建成世界海中最高5G基站 采用微波传输方案
  12. 同步四进制加减法可逆计数器设计(D触发器+74153)
  13. Error in value[[3L]](cond) : Package ‘rhdf5‘ version 2.36.0 cannot be unloaded:
  14. python之qrcode模块生成二维码
  15. CAD电气工程图教程之布局方法和设计规则
  16. 如何做高自由度的游戏
  17. 阿里OSS 的使用过程
  18. idea打包项目关于Cannot resolve org.csource:fastdfs-client-java:1.29-SNAPSHOT报错问题
  19. 费希尔定位器可实现测量和监控的功能
  20. Labeled Faces in the Wild: Updates and New Reporting Procedures

热门文章

  1. 【面试记录】比亚迪二面
  2. [MRCTF2020]你传你马呢
  3. 算法分析与设计——背包问题
  4. 计算机无法识别银行usb是,电脑不能识别USB设备(加密设备、网银U盾等)的解决方法...
  5. 非常全面的UI设计面试技巧,简单实用值得收藏
  6. 小猫钓鱼纸牌游戏java_C语言实现纸牌游戏(小猫钓鱼)
  7. matlab 矩阵的数组平方和,MATLAB中的矩阵和数组
  8. Url短连接实现原理与方法
  9. 微信公众号接口调用php示例,php微信公众号js-sdk开发应用_php实例
  10. 使用Softice调试驱动程序