问题标题: 贪心算法

0
0
已解决
张清岩
张清岩
资深守护
资深守护
  1. 贪心算法的基本思想

    在对一个问题求解时,总是做出在当前看来是最好的选择。也就是说,把一个较复杂的问题分解成若干子问题,对于每个子问题来说, 不从整体最优上加以考虑,只做出在某种意义上的局部最优解。
    通过每次得到局部最优解答,逐步推导出问题,进而得到全局最优解

    通俗地来讲,就是怎么做有利就怎么做。

  1. 贪心问题的解决总是伴随着排序,我们以选择尽量优的解的原则,将事物按照最优的解在最前的顺序排好,然后依次选取最优选择,构成整体最优解。
  2. 数字的拆分

        将一个大数拆分成小数字的和,如果要求拆分的数量尽量少,则贪心的思路是尽量拆成大的数字,值不够了再往小的数字去拆。

     数字删除固定位数

        把一个数字删除固定位数,要求最后剩的数字最大,不能只是删除所有小的数字。比如:2131要求删2位,如果是删除两个1,会得到23,但其实删掉21,剩下31才是最大的。
        因为删除后的数字位数是确定的,所以正确的贪心思路应该是让首位数字尽可能大。

     数字组合位数

        把若干个数字组合成一个新的数字,使其最小。不能够只是把短的数字或者小的数字放前面,比如2和11组合,把11放前面组成的数字更小。
        此时要考虑的是数字组合之后数值更小,比如a和b组合,我们应当比较ab和ba的大小,来确定谁放前面。

  3. 区间覆盖类问题

        对于区间覆盖类的问题(区间可能有重叠,问被覆盖的区间总大小),解题时考虑按照每个区间的起点从前往后排序,然后遍历每个区间,判断当前区间是否与前一个区间相连(判断当前区间的起点在上个区间的终点之前还是之后)。

    活动安排问题

        限定的场地要安排多个活动,不同的活动间时间可能会冲突,怎么才能安排尽量多的活动?
        按照活动的结束时间从小到大排序,尽量安排结束时间早的活动,这样才能为后续安排活动留下更充足的时间。
     

     建立模型

        对于某些贪心问题,直接想思路并不好想,需要对问题进行分析,建立数学模型,在此基**上确立贪心思路。

     验证贪心思路

        对于某个问题贪心思路的正确**验证,我们可以尝试按照此思路是否能举出反例,这是一个很好的筛选贪心思路的方法。


0
已采纳
李子杰
李子杰
资深光能
资深光能

请问**代表什么?这是一个好贴。

0
0
曹博扬
曹博扬
初级天翼
初级天翼

贪心说感觉用处不是很大

本人觉得还是要刷题

0
王文博
王文博
缔造者之神
缔造者之神

建议:总结成自己的话。更加通俗易懂一些更好

另外可以附加一些推荐练习的贪心题目

0
包思远
包思远
新手启示者
新手启示者

贪心光说用处并不是很大,因为每道题的贪心思路都不一样

建议增加一些推荐题目(建议大家把贪心题都刷刷)      @张清岩 

0
我要回答