贪婪算法

贪婪算法(Greedy Algorithm)也叫算贪心法,贪婪法.它是一个遵循启发式解决问题的算法范式.它的核心思想就是通过在每一步的选择中都选用当前步骤下最优的选择,期望结果是最优的算法.如 旅行推销员问题.

贪婪算法尤其适用于有最优子结构的问题中,最优子结构的意思是局部的最优解可以导出全局的最优解.贪婪算法与动态规划 的不同在于贪婪算法对每一个子问题都作出选择,不能回退;动态规划则会保存以前的运算结果,根据以前的结果对当前进行选择,可以回退.

贪婪算法可以解决一些最优化(如最大值最小值等)问题,比如求图中的最小生成树、求哈夫曼编码…其他大多数的情况都不适用贪婪算法,一旦一个问题可以使用贪婪算法来解决,那么贪婪算法一般是解决这个问题的最好办法.由于贪婪算法的高效性以及其答案比较接近最有结果,也可以作为辅助算法或直接解决一些结果要求不那么精确的问题.

原文首发于 https://leonchen1024.com/2018/12/03/Greedy-Algorithm/

原理

步骤

  1. 建立数学模型来描述问题,并建立一个备选答案区

  2. 把求解的问题分成若干个子问题,

  3. 使用一个选择函数对每个子问题求解最优解,并判断是否可用于整体问题

  4. 把所有子问题的最优解合成一个整的解

适用情况

贪婪算法适用于一些数学问题等,大部分适用的问题都有两个特点:

Greedy choice property (贪婪选择的属性)

我们可以在每个子问题找出最好的选择然后进行总结.贪婪算法可能会根据迄今为止已经做的选择进行计算,但是却不会考虑之后子问题的选择.它将一个大的问题分解成小的问题并一个一个进行迭代计算.换句话说,贪婪算法不会重新考虑它已经得出的选择.这是它和 dynamic programming 的主要区别,动态规划会详尽的计算并确保得到最优解,在一步之后,动态规划会根据之前所有得到的选择进行下一个选择,并可能会重新对之前步骤的算法路径进行修改.

Optimal substructure (最优子结构)

这个问题要包含optimal substructure(即这个问题的最优解包含了它的子问题的最优解)

如以下几种类型的问题

原文首发于 https://leonchen1024.com/2018/12/03/Greedy-Algorithm/

Matroids (拟阵)

matroid(拟阵) 是一个数学上的结构,它将linear independence (线性无关)的概念从 vector spaces (向量空间)推广到了任意的集合.如果一个最优解问题有一个拟阵结构,那么贪婪算法是最佳的解决办法.

Submodular functions(子模块函数)

一个函数 f 定义了当集合 \Omega 的所有子集合 S,T \subseteq \Omega 都满足 f(S)+f(T)\geq f(S\cup T)+f(S\cap T) 的情况即为子模块.

假设有人想要找到一个集合 S 使得函数 f 最大.贪婪算法将会通过逐个添加在每一步中使得 f 增加最多的元素,产生一个结果至少是 (1-1/e)\max _{X\subseteq \Omega }f(X) ??todo. 所以,贪婪算法至少得出最优解的 (1-1/e) \approx 0.63倍的解.

其他一些相对可以使用的问题

这些问题也可以使用贪婪算法,但不是最好的解法,他们在最差的情况下,可能会得到很差的结果.

失败的情况

原文首发于 https://leonchen1024.com/2018/12/03/Greedy-Algorithm/

在很多其他问题上,贪婪算法无法产生最优解,甚至可能产生一个最坏的解决方案.比如之前提到的 traveling salesman problem :对每一个城市都要计算一个最近的邻居,这种方式可能会产生一个最坏的路程.

比如下图,贪婪算法只考虑到下一步的最优解,但是却没有考虑到之后的解决方案,导致实际上得出的不是一个最优解.

Greedy-search-path-example.gif

Application

贪婪法基本上(但并不是一定)不适用于求全局最优解,因为他通常没有遍历所有的数据。他们太早给出了肯定的选择使得他们无法从所有的解法中找到最优解。比如,使用 greedy coloring 算法来解决 graph coloring problem 以及所有的 NP-complete 问题。尽管如此,贪婪法还是很有用的,因为他们容易被考虑到并且通常情况下会给出一个比较好的解法。

如果一个贪婪算法可以被证明是某个问题的全局最优解法,他通常情况下就会成为优先选择的方法,因为它比其他的最优解方法如 dynamic programming 要快。这种例子有使用 Kruskal's algorithmPrim's algorithm 找到minimum spanning trees,还有找到最优 Huffman trees.

贪心法也使用于 网络 路由 中。使用贪心路由,消息会被发送到距离目标节点“最近”的相邻节点。一个节点位置的定义(还有“最近”的含义)也许会取决于它的物理位置,如同在 ad hoc networks 中使用 geographic routing . 位置也可能会使一个人造的结构如同在 small world routingdistributed hash table 中.

Reference

https://en.wikipedia.org/wiki/Greedy_algorithm

About Me

我的博客 leonchen1024.com

我的 GitHub https://github.com/LeonChen1024

微信公众号

[图片上传失败...(image-ee4c03-1560057222368)]

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容