哥也色中文娱乐网
www..com 「数据结构与算法」贪图算法
1. 贪图算法空洞www..com
贪图算法(Greedy Algorithm)是一种在每一步聘用中王人接纳现时情状下的最优决策(局部最优解),并欲望通过一系列这么的局部最优聘用来找到全局最优解的算法战术。它的基本想想是在对问题求解时,老是作念出在现时看来是最佳的聘用。
举例,在找零问题中,假定咱们要使用最少的硬币数目来凑出某个金额。若是有1元、5角、1角的硬币,当要凑出8角时,贪图算法会优先聘用5角,然后聘用3个1角,在每一步王人聘用现时能使剩余金额减少最多的硬币。
2. 贪图算法的适用场景
步履安排问题
插插综合假定有一系列步履,每个步履王人有出手时辰和为止时辰。条目安排尽可能多的步履,使得这些步履在时辰上不突破。
处置想路是按照步履为止时辰对步履进行排序。然后纪律聘用步履,每次聘用为止时辰最早的步履,唯有该步履的出手时辰不与已选步履的为止时辰突破。
举例,有步履A(1,4)、步履B(3,5)、步履C(0,6)、步履D(5,7)、步履E(8,9)(这里括号内的数字永诀暗示步履的出手时辰和为止时辰)。最初聘用步履A,因为它为止时辰最早,然后步履B因为其出手时辰3大于步履A的为止时辰4,是以不错聘用,而步履C因为出手时辰0小于步履A的为止时辰4,弗成聘用。按照这种表情,临了不错聘用步履A、B、E,这是一种最优的步履安排有筹画。
哈夫曼编码问题www..com
用于数据压缩。在哈夫曼编码中,要构建一棵二叉树,使得出现频率高的字符编码较短,出现频率低的字符编码较长。
算法流程是最初将所有字符过火频率组成一个节点纠合,每次聘用频率最低的两个节点消除为一个新节点,新节点的频率为两个子节点频率之和。这个流程遏抑叠加,直到构建出一棵竣工的二叉树。
举例,有字符a、b、c、d,频率永诀为4、2、1、1。最初聘用c和d消除,新节点频率为2,然后这个新节点再和b消除,频率为4,临了和a组成二叉树。这么凭证二叉树的旅途就不错为每个字符生成编码,频率高的a编码较短,频率低的c和d编码较长,收场了数据的灵验压缩。
3. 贪图算法的局限性
贪图算法并不老是能得回全局最优解。因为它只有计划现时的最优聘用,而不有计划举座的最优情况。
举例,旅行商问题(Travelling Salesman Problem,TSP)。给定一组城市和它们之间的距离,条目找到一条经过所有城市且每个城市只经过一次的最短旅途。若是使用贪图算法,每次聘用离现时城市最近的城市行动下一个磋磨地,很可能会堕入局部最优,得回的旅途可能不是最短的全局旅途。假定存在城市A、B、C,A到B距离为1,A到C距离为3,B到C距离为4。若是从A动身,贪图算法会先聘用B,然后再去C,总距离为5,但实质上最优解是A C B,距离为4。
4. 贪图算法的收场阵势
阵势一:问题分析与瓦解
坚信问题是否不错用贪图算法处置。这需要分析问题是否具有贪图聘用性质(每一步的最优聘用能导致全局最优)和最优子结构性质(问题的最优解包含子问题的最优解)。
举例,在背包问题中,若是是0 1背包问题(每个物品要么全放要么不放),一般不合适贪图算法,因为它不得志贪图聘用性质。但若是是部分背包问题(物品不错分割),不错有计划使用贪图算法。
阵势二:坚信贪图战术
凭证问题的特质坚信每一步的最优聘用措施。如在找零问题中,最优聘用措施是聘用面值最大且不超越剩余金额的硬币。
阵势三:按照贪图战术冉冉求解
按照坚信的贪图战术,从启动情状出手,一步一局势进行聘用,直到问题得回处置或者无法陆续聘用。
阵势四:考据成果
由于贪图算法不一定能得回全局最优解,是以需要对得回的成果进行考据。不错通过与已知最优解对比(若是存在)或者通过其他阵势(如动态计较等)重新求解来考据。
贪图算法是一种通俗而灵验的算法战术,在好多实质问题中有通俗的专揽,但在使用时要精通其局限性www..com,确保它偶然适用于具体的问题求解。