蛮力法0/1背包

蛮力法

蛮力法是一种简单直接解决问题的方法,常常直接基于问题的描述,所以蛮力法也是最容易应用的方法。

蛮力法所依赖 的基本技术是遍历,即采用一定的策略依次处理待求解问题的所有元素,从而找出问题的解。由于其需要依次穷举待处理的元素,因此蛮力法是一种典型的指数级时间算法。

问题

给定n个重量为{w1,w2,···,wn}、价值为{v1,v2,···,vn}的物品和一个容量为C的背包,0/1背包是一个求解这些物品中的一个最有价值的子集,并且能够装入到背包中。

应用实例

有n项可投资的项目,每个项目需要投入资金si,可获利润为vi,现有可用资金M,应选择那些项目来投资才能获得最大利润。

想法

用蛮力法解决0/1背包问题,需要考虑给定n个物品集合的所有子集,找出所有重量不超过背包容量的子集,计算每个可能子集的总价值,然后找到价值最大的子集。例如,给定4个物品的重量为{7,3,4,5},价值为{42,12,40,25},和一个容量为10的背包,下表为求解的过程。

序号 子集 总重量 总价值
1 0 0
2 {1} 7 42
3 {2} 3 12
4 {3} 4 40
5 {4} 5 25
6 {1,2} 10 54
7 {1,3} 11 不可行
8 {1,4} 12 不可行
9 {2,3} 7 52
10 {2,4} 8 37
11 {3,4} 9 65
12 {1,2,3} 14 不可行
13 {1,2,4} 15 不可行
14 {1,3,4} 16 不可行
15 {2,3,4} 12 不可行
16 {1,2,3,4} 19 不可行

伪代码

输入:重量{w1,w2,···,wn},价值{v1,v2,···,vn},容量C
输出:装入背包的物品编号

  1. 初始化最大价值maxValue=0;结果子集S=∅;
  2. 对集合{1,2,···,n}的每一个子集T,执行如下操作:
    2.1 初始化背包的价值value=0;背包的重量weight=0;
    2.2 对子集T的每一个元素j
    2.2.1 如果weight+wj<C,则weight=weight+wj;value=value+vj
    2.2.2 否则,转入步骤2考察下一个子集;
    2.3 如果maxValue<value,则maxValue=value;S=T;
  3. 输出S中的各元素;

源代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
//用于计算程序运算时间
#include<ctime>using namespace std;#define N 100struct goods{int sign;//物品序号
int wight;//物品重量
int value;//物品价值
};int n, maxValue, cv, cw, C;//物品数量,价值最大,当前价值,当前重量,背包容量
int X[N],cx[N];//最终存储状态,当前存储状态
struct goods goods[N];int Force(int i)
{if(i > n-1){if(maxValue < cv && cw + goods[i].wight <= C){for(int k = 0;k < n;k++)X[k] = cx[k];//存储最优路径maxValue = cv;}return maxValue;}cw = cw + goods[i].wight;cv = cv + goods[i].value;cx[i] = 1;//装入背包Force(i+1);cw = cw-goods[i].wight;cv = cv-goods[i].value;cx[i] = 0;//不装入背包Force(i+1);return maxValue;
}int main()
{clock_t starttime,finish; //用于计算时间double time;starttime=clock();//用于计算程序运行时间printf("物品种类n:");scanf("%d",&n);printf("背包容量C:");scanf("%d",&C);for(int i = 0; i < n; i++){printf("物品%d的重量w[%d]及其价值v[%d]:",i+1,i+1,i+1);scanf("%d%d",&goods[i].wight,&goods[i].value);}int sum1 = Force(0);printf("蛮力法求解0/1背包问题:\nX=[");for(int i = 0; i < n; i++){cout << X[i]<<" ";}printf("] 装入总价值%d\n",sum1);finish=clock();time = (double)(finish-starttime)/1000;//时间单位为秒starttime=clock();//用于计算程序运行时间cout<<"time is:"<<time<<endl;return 0;
}

算法分析

对于一个具有n个元素的集合,其子集数量是2n,所以无论生成子集的算法效率有多高,蛮力法求解0/1背包都会是一个Ω(2n)的算法。

算法分析与设计——蛮力法0/1背包相关推荐

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

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

  2. 算法设计与分析------蛮力法

    算法设计与分析------蛮力法(c语言) 一.蛮力法(穷举法 枚举法) 1.定义 2.蛮力法使用情况 3.蛮力法的优点 4.蛮力法的缺点 5.采用蛮力法设计算法的2类: 6.简单选择排序和冒泡排序 ...

  3. 算法设计与分析—蛮力法

    蛮力法 蛮力法概述 蛮力法也称穷举法(枚举法)或暴力法,是一种简单的直接解决问题的方法,通常根据问题的描述和所涉及的概念定义,对问题所有可能的状态(结果)一一进行测试,直到找到解或将全部可能的状态都测 ...

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

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

  5. 算法设计与分析:蛮力法

    算法分析与设计实验报告 第 四 次实验 姓名 裴朵朵 学号 5001170016 班级 计科一班 时间 2019.10.31 地点 实验名称 暴力法的使用 实验目的 1.理解暴力法的工作原理.过程技巧 ...

  6. 算法设计与分析之蛮力法

    文章目录 前言 一.蛮力法设计思想 二.对蛮力法的思考 三.蛮力法的优缺点 四.使用蛮力法的几种情况 五.蛮力法设计步骤 六.蛮力法示例 总结 前言 大家好,我是一只勤勤恳恳的程序猿.本篇文章小猿将跟 ...

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

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

  8. 蛮力法(Brute Force)

    蛮力法是一种简单直接地解决问题的方法(暴力求解),常常直接基于问题的描述和所涉及的概念定义.注意,这里的"力"是指计算机的计算"能力".一般来说,蛮力策略常常是 ...

  9. 算法分析学习笔记二 蛮力法

    算法设计与分析之二 蛮力法 目录 1.蛮力法的设计思想 2.蛮力法优点 3. 冒泡排序分析 4. 选择排序分析 5. 蛮力法中冒泡排序与选择排序的时间空间复杂度分析 6. 蛮力法C语言实现 7. 算法 ...

最新文章

  1. 腾讯后台开发面试题--整理1
  2. JavaScript权威指南 - 函数
  3. 迭代器(Iterator)模式
  4. HDU - 3538 A sample Hamilton path(最短哈密顿路径+状压dp)
  5. JAVA面试题(part1)--变量相加与常量相加
  6. Find Minimum in Rotated Sorted Array
  7. 【opencv学习】ROI区域和图像填充
  8. boost 学习笔记
  9. real-time RGB-D camera relocalization
  10. 编程心法 之 内聚度和耦合度是什么
  11. Julia :where
  12. win10必须禁用的服务_Win10系统中这3个无用的设置,奉劝你还是早点关闭吧
  13. 全国重点城市建筑物矢量数据合集二(Shp格式+带高度)
  14. 电子商务之部分名词解释
  15. WPS中插入论文公式
  16. 自动删除微博【新版微博】
  17. PTA 浙大python第三章第六题
  18. 一个关于容抗与感抗的实验
  19. 如何理解“一揽子采购协议”?
  20. Python2.7开发经典RPG游戏《魔塔》

热门文章

  1. 人工智能成2020热搜专业,少儿编程未来可期!
  2. 移动智能家庭终端技术规范学习总结
  3. 标准PSO辨识NARMAX模型源码程序
  4. redis 高级特性一
  5. POJ 1279 Art Gallery 半平面交 多边形的核
  6. 云存储基础设施的决定:公共云与私有云
  7. 【v2.x OGE-example 第一节】 绘制实体
  8. 《LINUX下动态链接库的创建与应用》
  9. 排优解难 网上邻居常遇故障解决方法
  10. 中国人民大学_《组织行为学》_20 如何避免办公室政治的负面影响?