`

贪婪策略算法的总结分享

阅读更多
1. 贪婪算法描述

   贪婪算法又叫登山法,它的根本思想是逐步到大山顶,即逐步获得最优解,是解决最优化问题时的一种简单但适用范围有限的策略。
"贪婪"可以理解为以逐步的局部最优,达到最终的全局最优。

   贪婪算法没有固定的算法框架,算法设计的关键是贪婪策略的选择。一定要注意,选择的贪婪策略要具有无后向性。即某阶段状态一旦
确定后,不受这个状态以后的决策影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关,也称这种特性为无后效
性。因此,适应用贪婪策略解决的问题类型较少,对所采用的贪婪策略一定要仔细分析其是否满足无后效性。

2. 贪婪算法策略的一些应用
   霍夫曼树,构造最小生成树的Prim算法和Kruskl算法等。

3. 贪婪策略算法设计框架

(1) 贪心法的基本思路
    从问题的某一个初始解出发逐步逼近给定的目标,每一步都做一个不可回溯的决策,尽可能求得最好的解。

(2) 贪婪算法适用的问题
    局部最优策略导致产生全局最优解。
    利用数学方法证明"局部最优策略导致产生全局最优解。"

(3) 贪婪策略选择
    通过局部最优达到全局最优,即在每个阶段选取一个最优决策,逐步构造最优解。
    贪婪策略依靠经验或直觉来确定一个最优解得决策。
    贪婪策略一定要精心确定,在使用之前最好对策略的可行性进行数学证明。


(4) 贪婪策略下的算法框架
    从问题的某一初始解出发;
    while(能朝给定总目标前进一步){
        利用可行的局部最优决策逐步求解
    }
    最顶层便是一个全局最优解

    因此,可以说贪婪策略没有一个固定的算法框架。

4. 我对贪婪策略的分类

(1) 绝对贪婪

举个例子:

   1> 问题描述

      最优服务次序问题。
      设有n个顾客同时等待一项服务。顾客i需要的服务时间为ti, 1<=i<=n。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?
平均等待时间是n个顾客等待服务时间的总和除以n。
      input: 正整数n,表示n个顾客。 接下来一行输入n个正整数,表示n个顾客需要的服务时间。
      output:最小的平均等待时间

      例如:
      input:
      10
      56 12 1 99 1000 234 33 55 99 812

      output:
      532.00
  
   2> 贪婪策略选择
     
      要计算平均等待时间: average = (w1 + w2 + ... + wn) / n  最小,则要使((w1 + w2 + ... + wn))最小.
      题目中,每个顾客i需要的时间为ti,当ti进行服务时,其余n-1个顾客在等待,因此为使每次等待时间最少,必须优先选取
ti最小的顾客去服务。因此可对t1,t2,...,tn进行排序,优先选取最小的数去为顾客服务。
      贪婪策略选择:最短服务时间优先,可绝对使得平均等待时间最小。

   
(2) 相对贪婪

举个简单例子:

  1> 问题描述:

     有两个人轮流取2n个数中的n个数,所取数之和大者为胜。请编写算法,让先取数的人胜利。
     游戏规则:假设取数者只能看到2n个数中两边的数,并轮流取数。当两者所取数之和相同时,先取者胜。

  2> 贪婪策略选择:

     这个问题有很强的随机性。
     但有一种策略虽不能保证所取数的和是最大的,却是一个先取者必胜的全局策略。

     N个数排成一行,从左到右依次编号,1,2,...,N.
     因为N是偶数,又因为是我们先取数,计算机后取数,所以一开始我们既可以从最左边取1的数(奇编号),又可以从最右边取的数(偶编号)
如果我们第一次取奇编号(编号为1)的数,则计算机只能取到偶编号(2或N)的数;如果我们第一次取偶编号的数(编号为N),则接着计算机只能
取到奇编号的数(1或N-1);所以我们能够控制让计算机自始之终只取奇或偶一种编号的数。这样,只要比较奇编号数之和与偶编号数之和谁大,
就可以决定最开始是取奇编号数还是偶编号数了。

    因此,算法只需要分别计算一组数的奇位数和偶位数之和,然后就有了先取数者必胜的取数方案了。
分享到:
评论
5 楼 passionke 2010-06-12  
局部最优 未必是全局最优
全局最优又往往是np 问题
所以很尴尬  很蛋疼
4 楼 sunson468 2010-06-12  
真的好久不接触这些算法了~~

不过看起来这两个问题都只是排序的扩展,将排序的算放按照业务的需求放置在不同的位置。

1,从小到大排序就可以了吧~
2,从大到小排序,但是放置的位置是从两头开始,轮流放置[左右右左左右。。。]

贪婪算法应该在一个比较平坦的界面上执行的,比如如果用贪心算法来解决无阻挡点,无权重的图遍历会更好,局部的优化就能到总体的优化。但是限制太大了。

我记得以前有这么个问题,有个包能放N重量,若干M个重量分别为MW的物品,如何摆放才能使包的容量最大化,这个貌似用什么贪婪算法的,记不得,就是现在这个问题我也没办法给出一个觉的很高效的算法。
3 楼 coffeesweet 2010-06-12  
实际中绝对贪婪的应用应该多些吧
2 楼 maozj 2010-06-11  
peng3409 写道
总结的很全面,如果再有典型的示例就更完善

如果有兴趣,可在<<是否很久没抽象和逻辑了呢? DODO它吧(很基础)一 ~ 四>>系列可以看看
1 楼 peng3409 2010-06-11  
总结的很全面,如果再有典型的示例就更完善

相关推荐

    经典算法 贪婪算法.rar

    在设计贪婪算法时,关键在于选择正确的度量标准和策略,以尽可能保证全局最优解。尽管贪婪算法不适用于所有问题,但它在许多情况下提供了快速且近似最优的解决方案,是计算机科学中的一个重要工具。在学习和理解贪婪...

    常用排序算法总结 常用排序算法总结 常用排序算法总结

    常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结

    ofdm资源分配中的贪婪算法(代码)

    贪婪算法是一种局部最优策略,每次选择当前最优的解决方案,直到问题得到解决。在OFDM资源分配中,这种策略可能涉及为每个用户分配尽可能多的带宽或功率,同时保持系统整体性能的平衡。具体步骤通常包括: 1. 初始...

    贪婪算法仿真,贪婪搜索算法,matlab

    总结来说,MATLAB提供了强大的环境来实现贪婪算法解决多智能体覆盖问题。通过合理的设计和优化,贪婪算法能在有限的计算资源下达到良好的覆盖效果。在实际应用中,可以根据具体问题调整和改进算法,以获得更优的解决...

    深度强化学习和贪婪搜寻算法的训练对比仿真

    深度强化学习(Deep Reinforcement Learning, DRL)与贪婪搜索算法是两种在人工智能领域广泛应用的策略决策方法。本文将深入探讨这两种算法的核心概念、训练过程以及它们在实际问题中的应用和对比。 首先,深度强化...

    贪婪算法___数据结构

    贪婪算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。在数据结构领域,贪婪算法经常用于解决资源分配、任务调度等问题,它追求局部最优解,...

    最优化问题 贪婪算法

    贪婪算法是一种解决问题的策略,它在每一步都选择局部最优解,希望通过一系列局部最优的选择达到全局最优解。这种算法的特点是决策不可逆,一旦做出选择,就不能改变。贪婪准则则是指导这种决策过程的标准,通常是在...

    战争策略算法2022 年新出的算法

    战争策略算法2022 年新出的算法战争策略算法2022 年新出的算法 战争策略算法2022 年新出的算法战争策略算法2022 年新出的算法 战争策略算法2022 年新出的算法战争策略算法2022 年新出的算法 战争策略算法2022 年新出...

    背包问题之贪婪算法求解C语言源代码.rar_背包问题_贪婪_贪婪算法

    总结起来,这个压缩包包含的是用C语言实现的贪婪算法解决背包问题的源代码,提供了两种不同的实现方法,其中beibao1函数可能是对基本贪婪算法的一种改进。通过对这些代码的分析,我们可以深入理解贪婪算法在背包问题...

    贪婪算法matlab 代码

    一个具体的贪婪算法matlab程序代码,可以作为子程序嵌入到多种程序中,方便实用

    遗传算法和贪婪算法结合解决背包问题,matlab程序

    本算法用遗传算法和贪婪算法解决了背包问题,产生解得方法用贪婪算法,然后引入了一个错解的修复算法,搜索的时候用遗传算法。保证了快速收敛和解的完备性。包含源程序,算法介绍以及一份详细的报告,希望对读者有很...

    用MATLAB实现进化策略算法——求特定方程的极小值.pdf

    "MATLAB实现进化策略算法——求特定方程的极小值" 本文旨在使用MATLAB实现进化策略算法,以解决特定方程的极小值问题。进化策略算法是一种基于生物模型的随机搜索技术,模拟由个体组成的群体的集体并行学习过程。...

    压缩感知 贪婪追踪算法成功率的比较 MATLAB

    压缩感知(Compressive Sensing, CS...在这个项目中,你可以通过运行提供的MATLAB代码,观察不同贪婪追踪算法在压缩感知重构中的表现,分析并理解其背后的原理和优化策略,这对于深入理解和改进这些算法具有重要意义。

    计算机算法_贪婪算法.pdf

    本篇文章聚焦于一种广受关注的算法设计策略——贪婪算法,通过深入解析其原理、应用场景以及案例分析,帮助读者全面理解并掌握这一重要概念。 #### 贪婪算法概述 贪婪算法是一种在每个步骤中都选择局部最优解的...

    ACM-ACM竞赛常用算法之贪婪搜索算法实现.zip

    在ACM竞赛题解中,通常会包含一些经典的贪婪算法实例,通过具体问题分析如何应用贪婪策略,并给出相应的代码实现。这些实例可以帮助参赛者理解和掌握贪婪算法的精髓,从而在比赛中灵活运用。 压缩包内的文件可能...

    贪婪算法 货箱装船问题

    **贪婪算法**是一种简单直观的算法设计策略,它通过一系列局部最优的选择来达到全局最优解的目标。这种算法并不总是能得到全局最优解,但在很多情况下,特别是在一些特定问题上,贪婪算法能够提供相当好的近似解。 ...

    使用贪婪算法mp对图像进行重构

    在实际应用中,MP算法可能需要与其他技术结合,例如正则化、随机化策略等,以提高性能并避免过拟合。 总的来说,"使用贪婪算法mp对图像进行重构"是一个涉及图像处理、信号分析和优化理论的综合问题。通过稀疏表示,...

    贪婪算法_matlab算法实例源码.zip

    贪婪算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。在MATLAB中实现贪婪算法,可以帮助我们解决很多实际问题,比如任务调度、网络路由、...

Global site tag (gtag.js) - Google Analytics