`
liuzhifu123
  • 浏览: 34889 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

贪心算法(Greedy Algorithms)

 
阅读更多

贪心算法

适用于最优化问题的算法往往包含一系列步骤,每一步都有一组选择。贪心算法是使所做的选择看起来是当前最佳的,期望通过所做的局部最优解来产生出一个全局最优解。贪心算法对大多数优化问题来说可以产生最优解,但并不一定总是这样的。贪心算法的两个经典例子是最小生成树算法和Dijkstra单源最短路径算法。

1贪心策略的基本内容

贪心算法是通过做一系列的选择来给出某一问题的最优解。对算法中的每一个决策点,做一个当时看起来最佳的选择。这种启发式的策略并不是总能产生最优解,但它常常能给出最优解。

一般地,根据以下步骤设计贪心算法:

(1)        将优化问题转化为这样的一个问题:先做出选择,再解决剩下的一个子问题。

(2)        证明原问题总有一个最优解是做贪心选择得到的,从而说明贪心选择的安全。

(3)        说明做出贪心选择后,剩余的子问题具有这样的性质:如果将所做出的选择与子问题的最优解联合起来,可得到原问题的一个最优解。

在贪心算法中,贪心选择性和最优子结构是两个关键特点。如果我们能够证明问题具有这两个性质,那么就可以设计出它的一个贪心算法。

1.1   贪心选择性

贪心选择性:一个全局最优解可以通过局部最优选择来达到。在每个决策点,我们只做当前看似最佳的选择,然后再解决做出选择之后出现的子问题。贪心算法所做的当前选择可能依赖于已经做出的所有选择,但不依赖于有待于做出选择的子问题的解。

我们必须证明在每一步所做的贪心选择最终能产生一个全局最优解。

1.2    最优子结构

对于一个问题来说,如果它的一个最优解包含了其子问题的最优解,则称该问题具有最优子结构。在贪心算法中,一般是在原问题的基础上做出一个贪心选择而得到一个子问题,我们要证明将子问题的最优解与所做的贪心选择合并起来后可以得到原问题的一个最优解。

 

Example 1:最小生成树

请见下一篇文章:最小生成树(Greedy Algorithms)

Example 2: Dijkstra单源最短路径

请见下一篇文章:Dijkstra单源最短路径(Greedy Algorithms)

 

分享到:
评论

相关推荐

    计算机 贪心greedy算法 ppt

    计算机贪心算法,介绍了贪心算法的基本概念,全英文版 DR. ranka

    GREEDY ALGORITHMS IN DATALOG

    关于数据记录中的贪心算法

    Algorithms Illuminated Part 3_ Greedy Algorithms and Dynamic Programming.pdf

    算法详解 第三部分 贪心算法和动态规划,对于学习算法的同学很有帮助

    (code)Greedy Algorithms

    贪心算法的总结和代码实现,里面有文档总结和对应代码实现

    Data Structures and Algorithms using C#(pdf格式)

    本书除了包括对传统线形链表、二叉树、图论等的基于C#的描述外,还涉及对排序算法、搜索算法的讲解,同时包括对动态规划(dynamic programming)和贪心算法(greedy algorithms)的相关内容的说明

    算法:数据结构和算法

    算法 整理一下使用过的算法和数据结构 课程来源:《数据结构和算法之美》-作者:王争 复杂度分析 ...贪心算法 散列表 堆 链表 排序 阴离子 红黑树 回溯算法 递归 搜寻 跳表 排序 栈 字符串匹配 树 字典树

    algorithms-notes

    算法笔记 ##目录 [Python简介] () 数据结构 数组 (List, Array) 链表 (Linked List) 堆栈 (Stack) ...贪心算法 (Greedy) 动态规划 (Dynamic Programming) 搜索 (Depth First Search and Breadth First Search)

    Fractional-Knapsack:连续背包问题(也称为分数背包问题)

    连续背包问题(也称为分数背包... 此应用程序是用于解决此问题的贪婪算法的一个示例。它由JavaFX实现,其输入可以是随机的,也可以由用户自定义。 然后,选择项目的顺序将通过动画显示。 这是该应用程序的屏幕截图:

    人工智能词汇.docx

    人工智能词汇 人工智能词汇 人工智能词汇 人工智能词汇全文共11页,当前为第1页。...activation function 激活函数 Greedy layer-wise training 逐层贪心训练方法 additive noise 加性噪声 grouping matrix 分组矩阵

    leetcode数组下标大于间距-algorithm_java:实现数据结构和算法

    greedy:贪心算法 leetcode: LeetCode上的题目 methodofprogramming: 编程之美上的例子以及习题 第一章:字符 AlternateStr: 输入三个字符串s1、s2和s3,判断第三个字符串s3是否由前两个字符串s1和s2交错而成, 即不...

    ephemeralJ:临时代码,永久性的思想

    注释dp:动态规划贪心算法sw:滑动窗口tp:双指针fsp:快慢指针ds:并查集dfs:深度优先查找算法bfs:广度优先查找算法堆:堆bs:二分查找算法数学:数学ps:预设和bt:回溯法2021年1月5日2021年1月7日2021年1月8日...

Global site tag (gtag.js) - Google Analytics