贪心算法

贪心算法在解决问题的策略上是根据当前已有的信息做出选择,而且一旦做出选择,不管将来有什么结果,这个选择都不会改变。

贪心算法并不是从整体最优考虑,而是某种意义上的局部最优。这种局部最优选择并不能保证你总能获得全局最优解,但通常能得到较好的近似最优解。

贪心算法在每一步总是选择当前情况下的最优策略,它与分治法类似,都会把求解的问题划分成若干个小问题,每个小问题利用贪心策略求得其最优解,再组合这些小问题的最优解便能获得原问题的解。

性质

  1. 最优子结构。当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构。
  2. 贪心选择性质。指问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来得到。

举栗子

  1. 假如某种货币的硬币有如下几种面值:1元,5元,10元,25元,50元,100元,且数量不限。如果给定需为某客户找零的数额amount_rem,那么如何组合该货币的几种面值,从而使得客户所得找零的张数最少。
//硬币找零
function give_free(money) {
	let free_arr = [1,5,10,25,100]
	let free = free_arr.reverse();
	let i = 0;
	let amount_rem = [];
	while(money > 0) {
		let older = parseInt(money / free[i]);
		money = money % free[i];
		for(let j=0; j<older; j++){
			amount_rem.push(free[i])
		}
		i++;
	}
	return amount_rem;
}
console.log(give_free(48));
//[25,10,10,1,1,1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值