我是靠谱客的博主 迅速店员,最近开发中收集的这篇文章主要介绍贪心算法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、概念
所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的仅仅是在某种意义上的局部最优解。

二、步骤
建立数学模型来描述问题
把求解的问题分成若干个子问题
对每个子问题求解,得到子问题的局部最优解
把子问题的解局部最优解合成原来问题的一个解

三、该算法存在的问题
不能保证求得的最后解是最佳的
不能用来求最大值或最小值的问题
只能求满足某些约束条件的可行解的范围

四、贪心算法适用的问题
贪心策略适用的前提是:局部最优策略能导致产生全局最优解。
实际上,贪心算法适用的情况很少。一般对一个问题分析是否适用于贪心算法,可以先选择该问题下的几个实际数据进行分析,就可以做出判断。
对于一个具体问题,要确定它是否具有贪心选择性质,必须证明每一步所作的贪心选择最终导致问题的整体最优解。

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

例题:

1、题目的大致意思是:m元钱,n种物品,每种物品j磅,总价值f元,可以使用0到f的任意价格购买相应磅的物品,例如使用0.3f元,可以购买0.3j磅物品。要求输出用m元钱最多能买到多少磅物品。
输入 :
输入m元,n种物品,后输入n种物品,以及每种物品对应的重量、总价值,输入-1,-1结束输入。
这题可以用贪心算法求解,对于剩余物品,每次都购买剩余物品中性价比(即重量/价格)最高的物品,直到该物品被买完,则我们继续在剩余的物品中寻找性价比最高的物品,重复该过程;若金钱耗尽,则交易结束

#include<bits/stdc++.h>
using namespace std;
struct goods
{
	double j;//每种物品的总重
	double f;//每种物品的总价值
	double s;//每件物品的性价比 
	bool operator<(const goods &A)const{
		return s>A.s;
	}
	
}buf[1000];
double m;//有m元 
int n;// 有n中物品 
int main()
{
	while(scanf("%lf %d",&m,&n)!=EOF)
	{
		if(m==-1&&n---1)
		{
			break;
		}
	
	for(int i=0;i<n;i++)
	{
		scanf("%lf %lf",&buf[i].j,&buf[i].f);
		buf[i].s=buf[i].j/buf[i].f;
	}
	
	sort(buf,buf+n);
	//以上是对物品的性价比进行排序
	
	//接下来明确一个问题,当从性价比由高到低排序后,因为要最多磅,所以性价比高的要全部买,到最后才剩多少买多少
	//SO
	
	int index=0;//定义当前买到第几个货物了 
	double bang=0;//定义已经买了的总磅数 
	while(m>0)
	{
		if(m>buf[index].f)//当钱还没有花完 
		{
			m-=buf[index].f;
			bang+=buf[index].j; 
		}
		else
		{
			bang+=buf[index].j*m/buf[index].f;//无法全部买的时候,能买多少买多少 
			m=0;//记得置零 
		}
		index++; 
	 } 
	  cout<<bang<<endl;
}
	return 0;
}

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

最后

以上就是迅速店员为你收集整理的贪心算法的全部内容,希望文章能够帮你解决贪心算法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部