`
hojor
  • 浏览: 106656 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

贪婪算法(三)

阅读更多

上述贪婪算法能导致最优机器分配的证明留作练习(练习7)。可按如下方式实现一个复杂性为O (nl o gn)的贪婪算法:首先采用一个复杂性为O (nl o gn)的排序算法(如堆排序)按Si 的递增次序排列各个任务,然后使用一个关于旧机器可用时间的最小堆。

例1-6 [最短路径] 给出一个有向网络,路径的长度定义为路径所经过的各边的耗费之和。要求找一条从初始顶点s 到达目的顶点d 的最短路径。

贪婪算法分步构造这条路径,每一步在路径中加入一个顶点。假设当前路径已到达顶点q,

且顶点q 并不是目的顶点d。加入下一个顶点所采用的贪婪准则为:选择离q 最近且目前不在路径中的顶点。

这种贪婪算法并不一定能获得最短路径。例如,假设在图1 3 - 2中希望构造从顶点1到顶点5的最短路径,利用上述贪婪算法,从顶点1开始并寻找目前不在路径中的离顶点1最近的顶点。到达顶点3,长度仅为2个单位,从顶点3可以到达的最近顶点为4,从顶点4到达顶点2,最后到达目的顶点5。所建立的路径为1 , 3 , 4 , 2 , 5,其长度为1 0。这条路径并不是有向图中从1到5的最短路径。事实上,有几条更短的路径存在,例如路径1,4,5的长度为6。

根据上面三个例子,回想一下前几章所考察的一些应用,其中有几种算法也是贪婪算法。例如,霍夫曼树算法,利用n- 1步来建立最小加权外部路径的二叉树,每一步都将两棵二叉树合并为一棵,算法中所使用的贪婪准则为:从可用的二叉树中选出权重最小的两棵。L P T调度规则也是一种贪婪算法,它用n 步来调度n 个作业。首先将作业按时间长短排序,然后在每一步中为一个任务分配一台机器。选择机器所利用的贪婪准则为:使目前的调度时间最短。将新作业调度到最先完成的机器上(即最先空闲的机器)。

注意到在机器调度问题中,贪婪算法并不能保证最优,然而,那是一种直觉的倾向且一般情况下结果总是非常接近最优值。它利用的规则就是在实际环境中希望人工机器调度所采用的规则。算法并不保证得到最优结果,但通常所得结果与最优解相差无几,这种算法也称为启发式方法( h e u r i s t i c s )。因此L P T方法是一种启发式机器调度方法。定理9 - 2陈述了L P T调度的完成时间与最佳调度的完成时间之间的关系,因此L P T启发式方法具有限定性

能( bounded performance )。具有限定性能的启发式方法称为近似算法( a p p r o x i m a t i o na l g o r i t h m)。

本章的其余部分将介绍几种贪婪算法的应用。在有些应用中,贪婪算法所产生的结果总是最优的解决方案。但对其他一些应用,生成的算法只是一种启发式方法,可能是也可能不是近似算法。用的规则就是在实际环境中希望人工机器调度所采用的规则。算法并不保证得到最优结果,但通常所得结果与最优解相差无几,这种算法也称为启发式方法( h e u r i s t i c s )。因此L P T方法是一种启发式机器调度方法。定理9 - 2陈述了L P T调度的完成时间与最佳调度的完成时间之间的关系,因此L P T启发式方法具有限定性

能( bounded performance )。具有限定性能的启发式方法称为近似算法( a p p r o x i m a t i o na l g o r i t h m)。

本章的其余部分将介绍几种贪婪算法的应用。在有些应用中,贪婪算法所产生的结果总是最优的解决方案。但对其他一些应用,生成的算法只是一种启发式方法,可能是也可能不是近似算法。

分享到:
评论

相关推荐

    贪婪算法的代码

    三、算法说明: 执行程序时,当主存没有可用页面时,为了选择淘汰主存中的哪一页面, 腾出1个空闲块以便存放新调入的页面。淘汰哪个页面的首要问题是选择何种置换算法。 该程序采用LRU方法选择,依置换策略选择一个...

    汉密尔顿回路C语言贪婪算法

    汉密尔顿回路C语言贪婪算法 还附带Floyd算法 求解两点间过第三点的最短路径 及两点间过第三第四两点的最短路径的算法

    理解和掌握贪婪算法的基本思想

    1)理解和掌握贪婪算法的基本思想; 2)使用贪婪算法求解背包问题以及最小花费生成树问题。 二、方法原理 贪心算法就是做出一系列选择,使原问题达到最优解。在每一个决策点,都是做出当前看来的最优选择。 三、实验...

    01背包-动态规划&贪婪算法.ipynb

    python jupytnotebook源代码文件,包括01背包的动态规划和贪婪算法的解法,有少量注解,带运算时间输出

    matlab贪婪算法代码-GRASP-for-Traveling-Salesman:用于解决旅行商问题的贪婪随机自适应搜索程序(GRASP)

    matlab贪婪算法代码GRASP-for-Traveling-Salesman 用于解决旅行商问题的贪婪随机自适应搜索程序 (GRASP) % 作者:% William Arloff % 下面是针对旅行商问题的 GRASP 算法的代码 % 该算法通过调用贪婪随机初始化 % 来...

    淮海工学院算法分析与设计实验三贪心算法

    本文档是大学算法分析与设计课程的实验之一,介绍了贪心算法的原理和实现,以及应用,可以作为大学生实验的参考。

    贪心算法——最少硬币找钱

    贪心算法——用最少硬币找出n分钱的问题,以及代码。终于解决了

    3个程序,自己写的分治法,动态规划法,贪心算法

    用分治法实现元素选择 用动态规划法求解0/1背包问题 用贪心算法求解Prim算法 自己写的3个代码,都可以运行的

    算法导论-第三版(中文).rar

    第十六章 贪婪算法(Greedy Algorithms) 第十七章 分摊分析(Amortized Analysis) 第五部分(Part V) 高级的数据结构(Advanced Data Structures) 第十八章 B-树(B-Trees) 第十九章 二项式堆(Binomial ...

    三维传感器网络中贪婪算法的可达性分析 (2012年)

    针对贪婪算法存在路由空洞现象,定义并研究了半球型3D传感器网络中贪婪算法的可达性问题。基于节点随机分布的数学特性,分析了传感器传输半径与贪婪算法的可达率之间的定量关系,推导出保证设定可达率的传感器传输半径...

    C++数据结构与算法设计

    很好很清晰的一本C++算法书籍,先从C++程序设计基本开始,再到数据结构,最后上升到算法设计。适合新人新手学习和有经验的老手更深层次了解学习深入。...13 贪婪算法 14 分而治之算法 15 动态规划 16 回朔 17 分支定界

    贪心算法网友博客改进版

    http://blog.csdn.net/effective_coder/article/details/8736718#cpp 博客开始的背包问题不能达到完美效果,改进,使用博主说的第一种策略和第三种策略结合

    信号稀疏重构中的omp算法

    信号稀疏重构的omp算法,内含有三个不错的omp算法的Matlab代码。

    算法导论第三版英文原版

    第十六章 贪婪算法(Greedy Algorithms) 第十七章 分摊分析(Amortized Analysis) 第五部分(Part V) 高级的数据结构(Advanced Data Structures) 第十八章 B-树(B-Trees) 第十九章 二项式堆(Binomial Heaps...

    论文研究-大规模突发事件应急设施选址模型及算法.pdf

    大规模突发事件下应急物资的需求量巨大以及对资源持续需求的...对三个算法性能进行比较,遗传算法最优,上升算法次之,贪婪算法最差,上升算法适于求解中小规模的选址问题,而遗传算法更适合于大规模选址问题的求解。

    论文研究-基于分块-空间聚类的图像配准算法.pdf

    第一种为传统算法,包括分支定界法、改良回路法、贪婪算法、MST算法、MM算法、插入法等;第二种为现代优化算法,包括模拟退火算法、人工免疫算法、遗传算法、蚁群算法、粒子群优化算法、禁忌搜索算法、Hopfield神经网络...

    贪婪算法matlab代码-ResourceAllocationV2Xgraph:车载通信中基于图的资源共享,IEEE无线通信事务

    贪婪算法matlab代码ResourceAllocationV2Xgraph 该项目包含以下论文的MATLAB代码。 如果发现有任何帮助,请考虑将其引用。 L. Liang,S。Xie,GY Li,Z。Ding和X. Yu,“车辆通信中基于图的资源共享”,《 IEEE ...

    贪心算法 找零钱问题

    用贪心算法来解决贪心算法 【找零钱问题】一个小孩买了价值为33美分的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币找给小孩。假设提供了数目有限的面值为25美分、10美分、5美分、及1美分的硬币。给出一...

    实验三 贪婪法

    1. 实验目的 1.1.了解贪婪法的设计思想 1.2.掌握基本的贪婪法—Dijkstra算法和Kurskal、Prim算法

    算法分析与设计课件02

    扩充的数据结构(Augmenting Data Structures) 第四部分(Part IV) 高级的设计与分析技术(Advanced Design and Analysis Techniques) 第十五章 动态规划(Dynamic Programming) 第十六章 贪婪算法(Greedy ...

Global site tag (gtag.js) - Google Analytics