贪婪算法GreedyAlgorithm

Ⅰ原理

目的:

寻找最优解。从当前状态出发,根据局部状态(而非全局的最优决策)进行“选择”,在满足约束条件的前提下,使目标函数的增速达到极值,选择一个能够最快达到要求的输入元素。根据一系列选择得到的解,每一次选择都是那时状态的最佳解。事实上,最后得到的将不是全局的最优解。

两个性质

贪婪选择:

每次选择将会简化为子问题,而且问题最终的方案仅依赖于每次选择而不是将来的选择。

最优子结构:

当一个问题的最优解包含其子问题的最优解时,称其具有最优子结构。

Ⅱ应用思路

1.建立数学描述,用方程写出约束条件。解将是一个集合。

2.将待求解的问题划分为若干子问题,理清彼此间的嵌套关系。

3.选择一个贪婪选择策略。只有当局部的最优策略能够产生全局最优解时才可使用贪婪算法。(可先选择几个实际情况分析是否适用贪婪算法。一定注意判断问题是否适用贪婪算法,找到的解是否是最优解。)

4.对每一个子问题求解,并将全部的解写作原来问题的一个解。

5.对所得的解进行算法分析。包括算法复杂度分析,证明是贪婪选择(假设一个最优解,并证明可修改这个解使其以贪婪算法开始)。证明最优子结构(第一次选择后转化为怎样的子问题,子问题的最优解是否包含在问题的解中)。

Ⅲ实现框架

greedy (A,n)
{
	solution = ¦µ;
	for (int i = 1;i <= n;i++)
	{
		x = select(A);
		if (feasible (solution,x))
			solution = union (solution,x);
	}
	return solution;
}

Ⅳ例子

背包(可分与不可分),货郎担,最优装载,活动安排,多机调度。

数据结构中:单源点最短路径,最小生成树(prim,kruskal),Huffman编码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值