1、贪心算法

body { font-family: ‘Microsoft YaHei UI‘, ‘Microsoft YaHei‘, SimSun, ‘Segoe UI‘, Tahoma, Helvetica, sans-serif, ‘Microsoft YaHei‘, Georgia, Helvetica, Arial, sans-serif, 宋体, PMingLiU, serif; font-size: 10.5pt; line-height: 1.5; }html, body { }h1 { font-size: 1.5em; font-weight: bold; }h2 { font-size: 1.4em; font-weight: bold; }h3 { font-size: 1.3em; font-weight: bold; }h4 { font-size: 1.2em; font-weight: bold; }h5 { font-size: 1.1em; font-weight: bold; }h6 { font-size: 1em; font-weight: bold; }img { border: 0px; max-width: 100%; height: auto !important; }blockquote { margin-top: 0px; margin-bottom: 0px; }table { border-collapse: collapse; border: 1px solid rgb(187, 187, 187); }td { border-collapse: collapse; border: 1px solid rgb(187, 187, 187); }.wiz-todo, .wiz-todo-img { width: 16px; height: 16px; cursor: default; padding: 0px 10px 0px 2px; vertical-align: -10%; -webkit-user-select: none; }.wiz-todo-label { display: inline-block; padding-top: 7px; padding-bottom: 6px; line-height: 1.5; }.wiz-todo-label-checked { color: rgb(102, 102, 102); }.wiz-todo-label-unchecked { text-decoration: initial; }.wiz-todo-completed-info { padding-left: 44px; display: inline-block; }.wiz-todo-avatar { width: 20px; height: 20px; vertical-align: -20%; margin-right: 10px; border-top-left-radius: 2px; border-top-right-radius: 2px; border-bottom-right-radius: 2px; border-bottom-left-radius: 2px; }.wiz-todo-account, .wiz-todo-dt { color: rgb(102, 102, 102); }body { font-family: ‘Microsoft YaHei UI‘, ‘Microsoft YaHei‘, SimSun, ‘Segoe UI‘, Tahoma, Helvetica, sans-serif, ‘Microsoft YaHei‘, Georgia, Helvetica, Arial, sans-serif, 宋体, PMingLiU, serif; font-size: 10.5pt; line-height: 1.5; }html, body { }h1 { font-size: 1.5em; font-weight: bold; }h2 { font-size: 1.4em; font-weight: bold; }h3 { font-size: 1.3em; font-weight: bold; }h4 { font-size: 1.2em; font-weight: bold; }h5 { font-size: 1.1em; font-weight: bold; }h6 { font-size: 1em; font-weight: bold; }img { border: 0px; max-width: 100%; height: auto !important; }blockquote { margin-top: 0px; margin-bottom: 0px; }table { border-collapse: collapse; border: 1px solid rgb(187, 187, 187); }td { border-collapse: collapse; border: 1px solid rgb(187, 187, 187); }.wizimgdragresize { position: absolute; z-index: 1000; border: 1px solid black; background-color: white; }.wizimgdragresize-lt { cursor: nw-resize; }.wizimgdragresize-tm { cursor: n-resize; }.wizimgdragresize-rt { cursor: ne-resize; }.wizimgdragresize-lm { cursor: w-resize; }.wizimgdragresize-rm { cursor: e-resize; }.wizimgdragresize-lb { cursor: sw-resize; }.wizimgdragresize-bm { cursor: s-resize; }.wizimgdragresize-rb { cursor: se-resize; }

.wiz-todo, .wiz-todo-img { width: 16px; height: 16px; cursor: default; padding: 0px 10px 0px 2px; vertical-align: -10%; -webkit-user-select: none; }.wiz-todo-label { display: inline-block; padding-top: 7px; padding-bottom: 6px; line-height: 1.5; }.wiz-todo-label-checked { color: rgb(102, 102, 102); }.wiz-todo-label-unchecked { text-decoration: initial; }.wiz-todo-completed-info { padding-left: 44px; display: inline-block; }.wiz-todo-avatar { width: 20px; height: 20px; vertical-align: -20%; margin-right: 10px; border-top-left-radius: 2px; border-top-right-radius: 2px; border-bottom-right-radius: 2px; border-bottom-left-radius: 2px; }.wiz-todo-account, .wiz-todo-dt { color: rgb(102, 102, 102); }body { font-family: ‘Microsoft YaHei UI‘, ‘Microsoft YaHei‘, SimSun, ‘Segoe UI‘, Tahoma, Helvetica, sans-serif, ‘Microsoft YaHei‘, Georgia, Helvetica, Arial, sans-serif, 宋体, PMingLiU, serif; font-size: 10.5pt; line-height: 1.5; }html, body { }h1 { font-size: 1.5em; font-weight: bold; }h2 { font-size: 1.4em; font-weight: bold; }h3 { font-size: 1.3em; font-weight: bold; }h4 { font-size: 1.2em; font-weight: bold; }h5 { font-size: 1.1em; font-weight: bold; }h6 { font-size: 1em; font-weight: bold; }img { border: 0px; max-width: 100%; height: auto !important; }blockquote { margin-top: 0px; margin-bottom: 0px; }table { border-collapse: collapse; border: 1px solid rgb(187, 187, 187); }td { border-collapse: collapse; border: 1px solid rgb(187, 187, 187); }.wizimgdragresize { position: absolute; z-index: 1000; border: 1px solid black; background-color: white; }.wizimgdragresize-lt { cursor: nw-resize; }.wizimgdragresize-tm { cursor: n-resize; }.wizimgdragresize-rt { cursor: ne-resize; }.wizimgdragresize-lm { cursor: w-resize; }.wizimgdragresize-rm { cursor: e-resize; }.wizimgdragresize-lb { cursor: sw-resize; }.wizimgdragresize-bm { cursor: s-resize; }.wizimgdragresize-rb { cursor: se-resize; }body { font-family: ‘Microsoft YaHei UI‘, ‘Microsoft YaHei‘, SimSun, ‘Segoe UI‘, Tahoma, Helvetica, sans-serif, ‘Microsoft YaHei‘, Georgia, Helvetica, Arial, sans-serif, 宋体, PMingLiU, serif; font-size: 10.5pt; line-height: 1.5; }html, body { }h1 { font-size: 1.5em; font-weight: bold; }h2 { font-size: 1.4em; font-weight: bold; }h3 { font-size: 1.3em; font-weight: bold; }h4 { font-size: 1.2em; font-weight: bold; }h5 { font-size: 1.1em; font-weight: bold; }h6 { font-size: 1em; font-weight: bold; }img { border: 0px; max-width: 100%; height: auto !important; }blockquote { margin-top: 0px; margin-bottom: 0px; }table { border-collapse: collapse; border: 1px solid rgb(187, 187, 187); }td { border-collapse: collapse; border: 1px solid rgb(187, 187, 187); }.wiz-todo, .wiz-todo-img { width: 16px; height: 16px; cursor: default; padding: 0px 10px 0px 2px; vertical-align: -10%; -webkit-user-select: none; }.wiz-todo-label { display: inline-block; padding-top: 7px; padding-bottom: 6px; line-height: 1.5; }.wiz-todo-label-checked { color: rgb(102, 102, 102); }.wiz-todo-label-unchecked { text-decoration: initial; }.wiz-todo-completed-info { padding-left: 44px; display: inline-block; }.wiz-todo-avatar { width: 20px; height: 20px; vertical-align: -20%; margin-right: 10px; border-top-left-radius: 2px; border-top-right-radius: 2px; border-bottom-right-radius: 2px; border-bottom-left-radius: 2px; }.wiz-todo-account, .wiz-todo-dt { color: rgb(102, 102, 102); }body { font-family: ‘Microsoft YaHei UI‘, ‘Microsoft YaHei‘, SimSun, ‘Segoe UI‘, Tahoma, Helvetica, sans-serif, ‘Microsoft YaHei‘, Georgia, Helvetica, Arial, sans-serif, 宋体, PMingLiU, serif; font-size: 10.5pt; line-height: 1.5; }html, body { }h1 { font-size: 1.5em; font-weight: bold; }h2 { font-size: 1.4em; font-weight: bold; }h3 { font-size: 1.3em; font-weight: bold; }h4 { font-size: 1.2em; font-weight: bold; }h5 { font-size: 1.1em; font-weight: bold; }h6 { font-size: 1em; font-weight: bold; }img { border: 0px; max-width: 100%; height: auto !important; }blockquote { margin-top: 0px; margin-bottom: 0px; }table { border-collapse: collapse; border: 1px solid rgb(187, 187, 187); }td { border-collapse: collapse; border: 1px solid rgb(187, 187, 187); }.wizimgdragresize { position: absolute; z-index: 1000; border: 1px solid black; background-color: white; }.wizimgdragresize-lt { cursor: nw-resize; }.wizimgdragresize-tm { cursor: n-resize; }.wizimgdragresize-rt { cursor: ne-resize; }.wizimgdragresize-lm { cursor: w-resize; }.wizimgdragresize-rm { cursor: e-resize; }.wizimgdragresize-lb { cursor: sw-resize; }.wizimgdragresize-bm { cursor: s-resize; }.wizimgdragresize-rb { cursor: se-resize; }

贪心算法问题:

活动安排:

见《算法导论》一书P238.对于活动的安排问题理解:

.由知Aij表示在活动i的开始后,活动j结束前的活动安排。则由知

Aij=Aik+ak+Akj.由知

Aik表示在活动i结束后,活动k开始前的活动数。

Akj表示在活动k结束后,活动j开始前的活动数。

因此不包含活动 ak

  • 最早结束活动算法。

  1. /*
  2. 入口参数:
  3. k:第k个活动
  4. len:总的活动
  5. start_time:活动的开始时间
  6. end_time:活动的结束时间
  7. 注释:
  8. 本方法采用贪心算法解决活动安排的问题,有两张表分别表示活动的开始时间和结束时间。
  9. 于是每次都判断活动k是否合适。于是只有当活动m的开始时间大于活动k的结束时间时才
  10. 是合适的。
  11. */
  12. void dynamicPlan(int k,int len,int *start_time,int *end_time){
  13. int m=k+1;
  14. while(m<=len&&start_time[m]<end_time[k]){
  15. m++;
  16. }
  17. if(m<=len){
  18. std::cout<<m<<std::endl;
  19. std::cout<<start_time[m]<<std::endl;
  20. std::cout<<end_time[m]<<std::endl;
  21. std::cout<<std::endl;
  22. dynamicPlan(m,len,start_time,end_time);
  23. }
  24. }
  1. int start_time[11]={1,3,0,5,3,5,6,8,8,2,12};
  2. int end_time[11]={4,5,6,7,9,9,10,11,12,14,16};

这是一个简单的数据集。其中Si表示活动的开始时间,fi,表示的是活动的结束时间。但是注意fi是经过排序处理的,否则将出现如下情况。

如其中有某一活动开始时间为3但是结束时间为11。则明显是不行的。因为在上面的算法中,总是优先执行开始时间较早的那个活动。因此在

计算前务必对结束时间进行排序。这样。总是那些时间短的优先在前面进行选择。

  • 最晚开始活动的算法
    1. void dynamicPlan_endtime(int k,int len,int *start_time,int *end_time){
    2. int m=k+1;
    3. while(m<=len&&end_time[m]>start_time[k]){
    4. m++;
    5. }
    6. if(m<=len){
    7. std::cout<<m+1<<std::endl;
    8. std::cout<<"start time->"<<start_time[m]<<std::endl;
    9. std::cout<<" end time->"<<end_time[m]<<std::endl;
    10. dynamicPlan_endtime(m,len,start_time,end_time);
    11. }
    12. }

    如上图代码部分,按最晚开始活动的时间算法进行。

    1. int start_time_1[11]={12,8,8,6,5,5,3,3,2,1,0};
    2. int end_time_1[11]={16,14,11,10,7,9,9,5,12,4,6};

    ? 最晚开始活动的一种贪心算法。在上述数组中,己经对活动进行了排序,排序的规则是按活动开始顺序,活动开始晚的排在前面,开始早的排在后面。

    这就后办了,你从后面往前面走。因为是按活动的结束时间进行排序,因此,我们相当于对活动的时间长度进行了考虑,想一下,有个活动它开始得早,但是

    却结束得晚,只要一选中它,则其它的活动就没得选了。因此,在按活动进行排序是必要的。每次取当前活动的开始时间与另上一些活动的结束时间进行比较

    。由于开始时间是进行排过序的。则知开始时间晚的一般来说活动时间不长。然后另外的活动由于是按开始时间从晚到早的排序,则在它向后滑时,它的开始时间晚,结束时间也早。那么它是理想的选择。

算法对“贪心”的体现

由知在“最早结束”的算法中,由于我们是首先对活动的结束时间进行了一次排序,由早到晚,因此,我们在后面的选择的时候

总是优先选择结束时间早的(由于我们是对数组从前往后移),但是同时它的起始时间是大于当前我们活动的结束时间。因此它的活动、

时间长度相对来说是最短的,也就是局部最优解。

同理,对“最晚开始”的算法中。我们首先以活动的开始时间按大到小的顺序进行排序。然后从活动后往前开始。优先取活动开始时

间最晚的。同时我们所选活动的开始时间应该是小于当前活动的结束时间的。则其活动长度相对来说是最优的。因此。贪心地洗择活动

时间较短的活动。、

来自为知笔记(Wiz)

时间: 2025-01-13 05:18:15

1、贪心算法的相关文章

POJ1017 Packets(贪心算法训练)

Time Limit: 1000MS          Memory Limit: 10000K          Total Submissions: 51306          Accepted: 17391 Description A factory produces products packed in square packets of the same height h and of the sizes 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. These pro

贪心算法的简述与示例

贪心算法采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解,虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪婪法不要回溯.能够用贪心算法求解的问题一般具有两个重要特性:贪心选择性质和最优子结构性质. 参考:http://babybandf.blog.163.com/blog/static/61993532010112923767/ [例1]删数问题[B][/B] 试题描

算法导论——lec 13 贪心算法与图上算法

之前我们介绍了用动态规划的方法来解决一些最优化的问题.但对于有些最优化问题来说,用动态规划就是"高射炮打蚊子",采用一些更加简单有效的方法就可以解决.贪心算法就是其中之一.贪心算法是使所做的选择看起来是当前最佳的,期望通过所做的局部最优选择来产生一个全局最优解. 一. 活动选择问题 [问题]对几个互相竞争的活动进行调度:活动集合S = {a1, a2, ..., an},它们都要求以独占的方式使用某一公共资源(如教室),每个活动ai有一个开始时间si和结束时间fi ,且0 ≤ si &

五大常用算法之三贪心算法

贪心算法 贪心算法简介: 贪心算法是指:在每一步求解的步骤中,它要求"贪婪"的选择最佳操作,并希望通过一系列的最优选择,能够产生一个问题的(全局的)最优解. 贪心算法每一步必须满足一下条件: 1.可行的:即它必须满足问题的约束. 2.局部最优:他是当前步骤中所有可行选择中最佳的局部选择. 3.不可取消:即选择一旦做出,在算法的后面步骤就不可改变了. 贪心算法案例: 1.活动选择问题  这是<算法导论>上的例子,也是一个非常经典的问题.有n个需要在同一天使用同一个教室的活动a

零基础学贪心算法

本文在写作过程中参考了大量资料,不能一一列举,还请见谅.贪心算法的定义:贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关.解题的一般步骤是:1.建立数学模型来描述问题:2.把求解的问题分成若干个子问题:3.对每一子问题求解,得到子问题的局部最优解:4.把子问题的局部最优

贪心算法

一,贪心算法的设计思想 ? 从问题的某一个初始解出发逐步逼近给定的目标,每一步都作一个不可回溯的决策,尽可能地求得最好的解.当达到某算法中的某一步不需要再继续前进时,算法停止. 二,贪心算法的基本性质 1)贪心选择性质 所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到.这是贪心算法可行的第一个基本要素,也是贪心法与动态规划法的主要区别. 2) 最优子结构性质 该问题解的整体最优性依赖于其局部子问题解的最优性.这种性质是可以采用贪心算法解决问题的关键特征.例如

算法导论----贪心算法,删除k个数,使剩下的数字最小

先贴问题: 1个n位正整数a,删去其中的k位,得到一个新的正整数b,设计一个贪心算法,对给定的a和k得到最小的b: 一.我的想法:先看例子:a=5476579228:去掉4位,则位数n=10,k=4,要求的最小数字b是n-k=6位的: 1.先找最高位的数,因为是6位数字,所以最高位不可能在后5位上取到(因为数字的相对顺序是不能改变的,假设如果取了后五位中倒数第5位的7,则所求的b就不可能是6位的了,最多也就是4位的79228)理解这点很重要!所以问题变成从第1位到第k+1(n-(n-k-1))取

高级算法——贪心算法(找零问题)

function makeChange(origAmt, coins) {//贪心算法——找零问题 var remainAmt ; if (origAmt % .25 < origAmt) { coins[3] = parseInt(origAmt / .25); remainAmt = origAmt % .25; origAmt = remainAmt; } if (origAmt % .1 < origAmt) { coins[2] = parseInt(origAmt / .1); r

高级算法——贪心算法(背包问题)

贪心算法不能用来解决离散物品问题的原因是我们无法将“ 半台电视” 放入背包. 规则是按照物品价值高低顺序放入背包. function ksack(values, weights, capacity) { var load = 0; var i = 0; var v = 0; while (load < capacity && i < weights.length) { if (weights[i] <= (capacity - load)) { v += values[i

贪心算法换零钱(java)

贪心算法思想 贪心算法总是做出在当前看来做好的选择.也就是说贪心算法并不从整体最后考虑,他做出的选择只是局部最优选择.他所做出的仅是在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解. 1.算法思路 贪心算法是一种不追求最优解,只希望得到较为满意解的方法.贪心算法一般可以快速得到满意的解,因为它省去了为找最优姐要穷尽所有肯呢个而必须耗费大量时间.贪婪(心)算法是一种改进了的分级处理方法.其核心是根据题意选取一种