贪心选择算法

一、设计思想

	把一个复杂的问题**分解**成一系列简单的**局部最优选择**,每一步都是对当前解的**扩展**,直到获得问题的解。
	基本要素:(1)全局最优解可以由局部最优解得到;
                  (2)最优子结构:问题最优解包含其子问题的最优解;

二、与动态规划区别

	动态规划的每一步都是建立在子问题的最优解上的,而贪心算法不依赖与子问题,这就是二者之间最大的区别。

三、习题

	*1.部分背包问题*
	给定n种物品和一背包。物品的体积是vi,其价值为pi,背包的容量为C。问应如何选择装入背包的商品,使得装入背包中物品的总价值最大?
	输入:商品数量n,各商品的价值p,各商品的体积v,背包容量C
	输出:所选商品价格的最大值
	*****伪代码*** **
	算法:
	typedef struct node{
		double p;
		double v;
	}package[100];
	bool cmp(node x,node y){
		return x.p/x.v>y.p/y.v;
	}
	sort(package,package+100,cmp);//快排
	FractionKnapsack(n,p,v,C){
		i<———1,total<——0
		while C>0 and i<=n do  // 背包还没有满且物体还有剩余时
			if v[i] <= C then   //当物体体积小于背包剩余容量时
				total<——total+v[i]
				C<——C-p[i]
			else			//当物体体积大于背包剩余容量时,直接把背包装满
				total<——total+p[i]*(C/v[i])
				C<——0
			end if
			i<——i+1
		end while
		return total
	}
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值