Go语言数据结构和算法(三十)贪心简介

13 阅读2分钟

1.算法定义:

贪心算法是一种用于优化问题简单直观的算法.该算法在尝试找到解决整个问题的总体最佳方法时.会在每个步骤中找出最佳选择.贪心算法在某些问题非常成功.如用于压缩数据的霍夫曼编码.或用于寻找图的最短路径的Dijkstra算法.

贪心算法基本用于确定可能是最优的或可能不是最优的可行解.可行解是满足给定标准的子集.最优解是子集中最好和最有利的解.如果有多个解决方案满足给定条件.这些方案则视为可行解.最优解是所有解决方案最佳的方案.

2.特点:

最优子结构:

如果问题的最优解包含其子问题的最优解.则问题表现出最优子结构.贪心算法通过将问题分解为更小的子问题并找到每个子问题的最佳解决方案来应用此属性.

缺乏回溯:

一旦做出选择.算法就永远不会回头改变它的决定.即使这个决定是错误的.算法总是向前发展.

易于实现且速度快:

贪心算法时间复杂度通常低于其他算法.

贪心算法不一定总能产生最优解:

因为贪心算法会做出局部最优选择.所以可能会忽略需要非局部考虑的全局最优解.

3.使用场景:

最短路径:

贪心算法可用于查找图中两点之间的最短路径.例如Dijkstra算法可以从源节点开始.贪婪的选择到下一个节点的最短路径.直到达到目标节点.

最小生成树:

贪心算法可用于查找图的最小生成树.例如.Kruskal算法可以将最短的边添加到正在生长的树中.直到有所节点都连接起来.

调度:

贪心算法可用于调度任务以最小化完成任务所需要的总时间.一个例子是工作排序问题.它涉及选择最赚钱的工作完成.







一步一岁末.天地又奈何.





如果大家喜欢我的分享话.可以关注我的微信公众号

念何架构之路