zoukankan      html  css  js  c++  java
  • 算法学习——贪心篇

     

    贪心选择是指应用同一规则,将原问题变为一个相似但是规模更小的问题,而后的每一步都是当前看起来最佳的选择,且这种选择只依赖于已做出的选择,不依赖于未作出的选择。
    贪心算法说起来容易,操作起来却经常有点玄学。(我怎么想的到)
    在这里整理一些常见的贪心题目

    • 选择不相交区间问题
      这种问题一般具体题目大概就是时间安排,场地安排之类(有一个量不能被重复使用)。解决这种问题的方法为按照对这个量使用的截至时间进行排序,然后进行一次遍历,如果下一事件开始比这一事件开始迟就将这个事件考虑在内。
      证明:如果下一事件的开始比这一事件迟却没有考虑,则考虑下下一事件,若开始时间比下一时间结束早,那么将这两个事件哪个算上都无所谓,若开始时间比下一事件迟,则少考虑了一个,所以上述贪心策略是合理的
      注意:在开始和结束的判断上能否相等需要注意

    • 区间选点问题
      同样的对区间按照末尾进行排序(对这种区间问题一般考虑排序,要不然乱糟糟的不可能找到规律)
      选择点的规则为尽量选择在区间末尾
      因为区间与区间相交肯定在前一个区间的末尾相交,所以如果尽量把点放在那里的话就能尽可能让下一个区间用到。
      可以考虑用一个bool型数组表示点,如果选择就进行标记即可
      如果题目要求在区间内标记多个点,那么同样还是尽量在区间的末尾放点(先在这个区间内看一下是否需要再放,如果需要从后往前放)

    • 区间覆盖问题
      给定一定的区间,选择尽量少的区间覆盖一条指定线段区间
      还是得对区间进行排序(不同的在于是对区间的左端点进行排序),依次处理每个区间,每次选择覆盖s的区间中右端点最大的一个,并将线段的左端点更新为区间的右端点,直到选择的区间包含线段的右端点为止。

     

  • 相关阅读:
    饿了么P7级前端工程师进入大厂的面试经验
    前端程序员面试的坑,简历写上这一条信息会被虐死!
    这次来分享前端的九条bug吧
    移动端开发必会出现的问题和解决方案
    创建一个dynamics 365 CRM online plugin (八)
    创建一个dynamics 365 CRM online plugin (七)
    创建一个dynamics 365 CRM online plugin (六)
    创建一个dynamics 365 CRM online plugin (五)
    使用User Primary Email作为GUID的问题
    怎样Debug Dynamics 365 CRM Plugin
  • 原文地址:https://www.cnblogs.com/qgmzbry/p/10662106.html
Copyright © 2011-2022 走看看