• 贪心总结


    一、基本概念

           所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。 所以对所采用的贪心策略一定要仔细分析其是否满足无后效性

     

    二、基本思路

    1.建立数学模型来描述问题。-------贪心的策略(排序方式)一般就出自数学模型
    2.把求解的问题分成若干个子问题。----推导出数学模型的分析依据
    3.对每一子问题求解,得到子问题的局部最优解。
    4.把子问题的局部最优解合成原来解问题的一个解。
     
     

    三、适用问题

      贪心策略适用的前提是:局部最优策略能导致产生全局最优解。

    四、实现框架

    从问题的某一初始解出发;
    while (能朝给定总目标前进一步)
    {
      利用可行的决策,求出可行解的一个解元素;
    }
    由所有解元素组合成问题的一个可行解;

    五、【总结】:

    1、该问题是否能用贪心解决:想要解决这个问题,而这个问题又有许多局部问题,则求出局部最优解,从而推送到全局最优解
    2、贪心策略的选择是否正确:要进行适当的验证

    贪心策略就是选择将数据如何排序,贪心问题的数据一般是用结构体存储,并且是二维的(例如时间 t 和花费的代价 d ),排序方式可以如下:
    1、单独按某一变量排序,return a.t>b.t;
    2、加法排序 return a.t+a.d<b.t+b.d;
    3、乘法排序  return a.t*a.d<b.t*b.d;
    4、除法排序 return 1.0*a..t/a.d<1.0*b.t/b.d;
     
    无论选择哪种排序方法,都要事先代入多组数据验证;若结果出现WA,从以下两方面入手排除错误:
    1、数据范围选择过小,改用long long尝试
    2、排除数据范围的问题,那一般就是排序方法出错,在仔细考虑如何正确排序
     
     
     
     
     
  • 相关阅读:
    DevExpress.XtraCharts.chartControl
    DevExpress控件之:ChartControl 动态绑定数据
    字符串的方法详解
    编码
    格式化输出
    关于while循环中的break和continue的区别
    while循环和for循环
    [AGC028D] Chords
    [CF1392H] ZS Shuffles Cards
    [CF568E] Longest Increasing Subsequence
  • 原文地址:https://www.cnblogs.com/-citywall123/p/11184316.html
Copyright © 2020-2023  润新知