算法设计与分析——贪心算法——背包问题

算法博弈论-这个贪心算法为什么是背包问题的1/2近似算法 预告,突起想起之前证明过一个一级目录二级目录三级目录 我想起当时证明出来特开心,虽然不会长更博弈论,还是可以分享一下(在其它文中有人说没想通)!晚上回家就写,书和证明都在家里。 一级目录 二级目录 三级目录 ... 阅读详情

0-1背包问题:
前提:给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。
问题:应如何选择装入背包的物品,使得装入背包中物品的总价值最大?

背包问题:
与0-1背包问题类似,所不同的是在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包,1≤i≤n。

贪心算法总是做出在当前看来是最好的选择,也就是说,贪心算法并不从整体最优上加以考虑,所做出的的选择只是某种意义上的局部最优选择;
虽然贪心算法不是对所有的问题都能得到整体最优解,但对范围相当广的许多问题都能产生最优解,即使贪心算法不能得到整体最优解,但其最终结果却是最终结果却是最优解的很好的近似解。

注意:不要用if else

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

typedef struct Node
{
	float value;
	float weight;
	float vw;//单位重量的价值 
}node;
bool cmp(node x,node y)
{
	if(x.vw>y.vw)//从大到小排序 
		return true;
	else
		return false;
}
void knaspsack(int n,float capacity,float *value,float *weight,float *result)
{
	Node node[n+1];
	for(int i=1;i<=n;i++)
	{
		node[i].value=value[i];
		node[i].weight=weight[i];
		node[i].vw=(float)node[i].value/node[i].weight;
		
	}
	
	sort(node+1,node+n+1,cmp);
	for(int i=1;i<=n;i++)
	{
		value[i]=node[i].value;
		cout<<value[i]<<" ";
		weight[i]=node[i].weight;
		
		cout<<weight[i]<<" ";
		
		cout<<node[i].vw<<endl;
	}
	
	float c=capacity;

	int i;
	for(int i=1;i<=n;i++)
	{
		if(c<=weight[i])
				break;
		//这里不能使用if else 
		result[i]=1;
		c=c-weight[i];
		
	}
	
	if(i<=n)
	{		
		result[i]=c/weight[i];		
	}
}
void knapsack(int n,float M,float v[],float w[],float x[])  
{  
    int i;  
    //物品整件被装下  
    for(i=1;i<=n;i++)
    {  
        if(w[i]>M) break;   
        x[i]=1;  
        M-=w[i];  
    }   
    //物品部分被装下  
    if(i<=n) x[i]=M/w[i];   
} 
int main()
{
	cout<<"输入背包中物品的种类:";
	int n;
	cin>>n; 
	cout<<"输入背包的容量";
	float capacity;
	cin>>capacity; 
	cout<<"输入物品对应的价格:";
	float value[n+1]; 
	for(int i=1;i<=n;i++)
	{
		cin>>value[i];
	}
	cout<<"输入物品对应的重量:";
	float weight[n+1];
	for(int i=1;i<=n;i++)
	{
		cin>>weight[i];
	 }
	 float result[n+1];
	 	for(int i=1;i<=n;i++)
	{
		result[i]=0;
	}
	 //knaspsack(n,capacity,value,weight,result);
	 knapsack(n,capacity,value,weight,result);
	 for(int i=1;i<=n;i++)
	 {
	 	cout<<result[i]<<" ";
	 	
	 }
	  return 0;
 } 

在这里插入图片描述

在这里插入图片描述
贪心算法解决背包问题的主要时间用在了将其各种物品按其单位重量的价值从小到大排序 O(n*logn)

算法导论【近似算法】—0-1背包问题的近似算法 若对于每一个固定的ϵ0ϵ > 0ϵ0,算法 A 的运行时间以实例III的规模的多项式为上界,则称 A 是一个多项时间近似方案。在 PTAS 的基础上,进一步要求算法 A 的运行时间以实例III的规模和1ϵ1 / ϵ1/ϵ的多项式为上界,则称 A 是一个完全多项时间近似方案。FPTAS 被认为是最值得研究的近似算法,仅有极少数的 NP-hard 问题存在 FPTAS。 阅读详情

相关推荐

背包问题的多项式时间近似解

背包问题的多项式时间近似解一些概念背包问题的伪多项式时间算法强NP难问题和FPTAS 一些概念 ∏\prod∏ 是一个NP难问题的优化问题 f∏f_{\prod}f∏​ 是这个优化问题的目标函数,也就是我们要优化得到的近似解 I 是问题实例 ϵ\epsilonϵ 是错误参数,我们得到的近似算法,有下面的性质 如果ΠΠΠ是一个最小化问题,则fΠf_ΠfΠ​(I,s)≤(1 +ε)· OPT。 如果ΠΠΠ是一个最大化问题,则fΠf_ΠfΠ​(I,s)≥(1-ε)· OPT。 PTAS:Polynomial

央阑的博客 6021

背包问题算法全解析:动态规划和贪心算法详解

计算机背包问题是动态规划算法中的经典问题。本文将从理论和实践两个方面深入探讨计算机背包问题,并通过实际案例分析,帮助读者更好地理解和应用该问题。

BASK2311的博客 6469

算法分析与设计 —— 贪心算法「活动安排」「背包问题」「哈夫曼编码」

文章内容简介 > 贪心算法基本要素:贪心选择性和最优子结构 > 贪心算法正确性证明 > 活动安排问题、背包问题、哈夫曼编码

imByte的博客 2551

多背包问题近似解法及其近似比

多背包问题:给定n个物品,其中物品i的价格是vi,重量是wi,有m个背包,背包j最大能装物品重量为Bj,求这些背包能够装下物品的最高价格,其中每个物品要么完全放入背包要么不放入。 (1),给出一个求解该问题的近似算法。 (2),设所有Bj都相等,分析你给出的算法的近似比。 这个问题到底有没有非近似的方法?这个是不是NP问题呢?虽然有些疑惑,但还是找出一个近似算法吧! (1),这里用贪心算...

weixin_30678349的博客 1057

算法设计与分析心得(1):为什么0-1背包问题最优解与贪心算法所得解的近似比不超过二

贪心解的选择策略 我们定义贪心解的选择策略如下: 首先,不失一般性,我们忽略掉所有单个体积大于背包容积的物品,这些物品是一定不会被选中的。 再将所有物品按照单位价值由大到小排序,分别为itemitemitem1,itemitemitem2…itemitemitemn,itemitemitemn+1… 不失一般性,我们假定我们取完前n个之后,恰好装不下第n+1个了,那么我们的贪心法策略如下: 取ma...

weixin_43197820的博客 2252

【算法设计与分析】贪心法

本文为《算法设计与实现》课程学习过程中的贪心法学习实验报告,实验报告原文和源码均已上传,可自行下载或私信笔者。

weixin_52099756的博客 1114

【算法设计与分析】实验5:贪心算法—装载及背包问题

贪心算法是一种逐步构建解决方案的算法策略,贪心算法通过一系列局部最优选择来构建全局最优解,其关键在于每一步选择都是当前状态下的最佳决策,是自顶向下的策略动态规划算法一般是自底向上解决问题。贪心选择性质和最优子结构性质。

m0_73970214的博客 1600

哨兵1号(Sentinel-1)雷达SAR数据预处理全流程:从下载到精确配准

本文详细介绍了哨兵1号(Sentinel-1)雷达SAR数据从下载到精确配准的全流程预处理方法。内容涵盖SLC与GRD数据选择、ASF平台下载技巧,并重点解析了使用SNAP软件进行几何校正、辐射定标及高精度配准的核心步骤,为InSAR形变监测等应用提供可靠的数据基础。

weixin_29208327的博客 477

算法设计与分析(第四周)贪心算法、背包问题

贪心算法 顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。 虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。 例:用贪心法求解...

寒泉 1万+

安装了anaconda,pycharm导入numpy时提示没有该包(模块)?

**问题详情:**我安装了anaconda,在利用Pycharm学习numpy这个库的时候,导入numpy这个包的时候提示我没有nummpy这个模块:No module named numpy.如下图所示。 应该说安装了Anaconda,里边就自带了numpy这个库,就应该能够使用。我一个新手怎么搞得懂呢?于是网上查了查找到了一个解决办法,说是我项目的解释器应该设置为Anaconda安装目录下的python.exe,而不应该是系统自带的:https://blog.youkuaiyun.com/aanndd77/art

qq_39820505的博客 1万+

华为IPD实战:从概念到发布的完整流程拆解(附各阶段关键文档模板)

本文深入拆解华为IPD(集成产品开发)从概念到发布的完整实战流程,涵盖概念、计划、开发验证及发布生命周期四大阶段。详细解析了各阶段的核心活动、关键产出与决策评审点,并提供了如《初始业务计划书》等关键文档模板框架,旨在帮助企业将IPD理论转化为可执行的操作指南,提升研发效率与产品成功率。

weixin_29212429的博客 525

背包问题贪心算法python_贪心算法实现背包问题算法设计与分析实验报告

一.实验要求1.优化问题有n个输入,而它的解就由这n个输入满足某些事先给定的约束条件的某个子集组成,而把满足约束条件的子集称为该问题的可行解。可行解一般来说是不唯一的。那些使目标函数取极值(极大或极小)的可行解,称为最优解。2.贪心法求优化问题算法思想:在贪心算法中采用逐步构造最优解的方法。在每个阶段,都作出一个看上去最优的决策(在一定的标准下)。决策一旦作出,就不可再更改。作出贪心决策的依据称为...

weixin_39860166的博客 1013

通过薄膜太阳能电池中的热激电流量化陷阱状态

发光(led)和光伏(PV)器件的性能取决于光活性半导体材料的质量。由于材料杂质或在制造过程中在半导体材料中无意地引入缺陷,导致偏离最佳性能。这些缺陷被称为阱态,或简称“阱”,它是半导体带隙内的高能态。一般来说,陷阱的发生可能是由于材料杂质(在散装)或在不同材料层之间的界面。在有机半导体中,由于天然物质的无序性,阱态经常出现。在无机和杂化半导体(例如:杂化钙钛矿、硅……)中,晶界的存在是圈闭态的已知来源。由于陷阱产生的原因多种多样,它们对装置的影响也是多种多样的。由于载流子的多次捕获和释放事件,特别是浅阱的

FluximAG的博客 2849

算法分析与设计(贪心算法求背包问题)

1.设有一个载重量为10的背包,现有4个可拆分物品,每个物品的重量分别为(w1,w2,w3,w4)=(2,4,5,6),它们的价值分别为(p1,p2,p3,p4)=(2,3,5,8)。试问:如何装载才能使得装入背包中的物品的总价值最大?(2)最大收益是选择第四件,第一件整个物品以及两个重量单位的第三件物品,总价值为12.(1)请设计并实现一个求解该问题的贪心算法,指出所采用的贪心选择策略。(2)求出最大收益,以及具体的装载方案。

m0_69317994的博客 834

MATLAB随机生成m个三维坐标点,且各个坐标点之间的距离不小于n

randi函数 randi(max,m,n); %生成均匀分布的随机整数,max生成的随机整数最大值,生成m行n列的矩阵 编写函数sampling function [x,y,z]=sampling(lowx,upx,lowy,upy,lowz,upz,m,n) %该函数用来产生不重复的随机整数矩阵 %low—随机整数下界;up—随机整数上界;m—坐标点个数;n—各个坐标点之间的最小距离 %编...

qq_45384561的博客 9436

arduino esp8266_Arduino传感器教程 第22章ESP8266 控制 5V 继电器

ESP8266控制5V继电器目录一、NodeMCU二、工作原理本文将使用亚马逊 AlexaEcho 和 ESP8266 控制 5V 继电器。NodeMCUNodeMCU 是一个开源的 IoT 物联网硬件开发板,由于它支持 WIFI 功能且使用方法十分类似 Arduino 开发板,所以近些年获得了越来越多来自全世界的创客朋友们的青睐。NodeMCU 尺寸与 Arduino Nano 类似。...

weixin_39611722的博客 3455

算法分析与设计-15-背包问题的贪心算法

背包问题 #include #include #include using namespacestd; #define N 1000 struct bag{ int w;//物品的重量 int v;//物品的价值 double c;//物品的性价比 }a[1001]; bool cmp(bag a,bagb) { return a.c>=b

高行行 805

基于MATLAB的Hough变换指针式仪表识别

综上所述,本文介绍了如何使用MATLAB中的Hough变换算法来实现指针式仪表的自动识别和读数。通过图像预处理、Hough变换和直线提取,我们可以准确地检测指针的位置,并进一步进行仪表读数。本文将介绍如何使用MATLAB中的Hough变换算法来实现指针式仪表的自动识别和读数。在指针式仪表识别中,我们可以利用Hough变换来检测仪表盘上的指针。以上是基于MATLAB的Hough变换指针式仪表识别的详细步骤和源代码示例。根据指针在仪表盘上的位置,我们可以进行角度计算或使用其他技术来获取准确的读数。

techDM的博客 462

算法分析与设计2017-2-背包问题的贪心算法

算法knapsack的主要计算时间在于将各种物品依其单位重量的价值从大到小排序。因此,算法的计算时间上界为O(nlogn)。为了证明算法的正确性,还必须证明背包问题具有贪心选择性质。这种贪心选择策略对0-1 背包问题就不适用了。看下图例子,其中有3中物品,背包的容量为50千克。物品1重10千克;价值60元;物品2重20千克;价值100元;物品3重30千克,价值120元。因此,物品1每千克价值6元,物

高行行 2409

【信号与系统】Multisim 仿真信号合成与分解

软件 Multisim 进行方波信号的产生、分解和合成,观察信号波形的分解与合成,加深对信号频谱的理解。

AXYZdong的博客 2万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

算法分析与设计C++ 第五章:贪心算法(背包问题和最优装载问题)

10.17 记一个问题, org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Undeclared variable: 2 ### The error may exist in file [D:\Codes\...

OneSeek的博客 2001

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

计算机算法分析与设计(11)---贪心算法(活动安排问题和背包问题)

1. 贪心算法的定义:贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。2.注意:贪心算法对有些问题可以快速获得整体最优解。对有些问题虽不能得到整体最优解,却可以得到近似最优解。贪心选择性质:贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择来得到,即通过贪心选择来达到。最优子结构性质:一个问题的最优解包含其子问题的最优解。相同:贪心算法和动态规划算法都要求问题具有最优子结构性质。

m0_62881487的博客 7643

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

算法分析与设计 第五次理论作业

TOC]

没事发发博客 564

贪心算法

贪心算法的基本思想:在算法迭代的每一步,选择当前状态下最优解,不断重复这一过程,最终得到结果,但这个结果不一定是全局最优的。算法的优点在于:简便,高效。缺点是:得到的解不一定正确。

MingXi__HeXi的博客 1289

头歌实训作业 算法设计与分析-贪心算法(第1关:部分背包问题)

设有编号为1、2、…、n的n个物品,它们的重量分别为w1、w2、…、wn,价值分别为v1、v2、…、vn,其中wi、vi(1≤i≤n)均为正数。有一个背包可以携带的最大重量不超过W。求解目标:在不超过背包负重的前提下,使背包装入的总价值最大(即效益最大化),与0/1背包问题的区别是,这里的每个物品可以取一部分装入背包。

B5201234的博客 1030

算法设计与分析第二版源码

第1章 算法设计基础 欧几里德算法求最大公约数 短除法求最大公约数 第2章 算法分析基础 冒泡排序 合并排序 数组中求最小元素 起泡排序的比较和移动次数 顺序查找 第3章 蛮力法 串匹配BF算法 串匹配KMP 凸包问题 最近点对 百元买百鸡问题 选择排序 顺序查找 第4章 分治法 Fibonacci序列 归并排序 快速排序 数字旋转方阵 最大字段和问题 最近对问题 棋盘覆盖问题 汉诺...

wwt的博客 7701
上一篇: c语言——刷新控制台界面与返回上一级
下一篇: 算法设计与分析——贪心算法——最优装载问题
943802606
博客等级 码龄6年 1万+粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值