贪心算法

当一个问题具有最优子结构性质时,可用动态规划求解。

贪心算法总是作出当前看来是最好的选择,并不从整体最优上考虑,只是在某种意义上的局部最优选择。

有时,即时贪心找不到整体最优解,其结果也是最优解的近似解。

应用实例:

活动安排问题

最优装载问题

哈夫曼编码 

单源最短路径

最小生成树

多机调度问题

贪心算法,通过一系列的选择来得到问题的解,每一个选择都是当前状态下的局部最好选择,即贪心选择。

1 贪心选择性质:

指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心来达到

贪心选择可以依赖于以往所作的选择,但绝不依赖于未来所做的选择,也不依赖于子问题。

动态规划:自底向上方式

贪心算法:自顶向下方式

2 最优子结构性质

当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。(动态规划,贪心算法的关键特征)

本文转自博客园xingoo的博客,原文链接:贪心算法,如需转载请自行联系原博主。

时间: 2024-08-02 14:31:32

贪心算法的相关文章

贪心算法的理解与实例应用

问题描述 贪心算法的理解与实例应用 对贪心算法的深刻理解,以及贪心算法的经典应用,对相应的实例进行分析 解决方案 哈夫曼树-贪心算法的应用实例strtotime 深入理解应用实例---------------------- 解决方案二: 可参考 http://blog.csdn.net/effective_coder/article/details/8736718

关于贪心算法的题目的一个问题

问题描述 关于贪心算法的题目的一个问题 OJ上的一道题Given Length and Sum of Digits 题目是 我写的答案是 代码链接是 http://codepad.org/LirbPkpG 在oj上提交后出现"Wrong answer on test 8" 这是因为错在哪里? 解决方案 一个贪心算法实例Dijkstra算法是解单源最短路径问题的一个贪心算法 解决方案二: 应该是说的,这道题答案是错误的,你没有在本地环境测试一下么,报错是啥内容,这个算法乍一看,看不出问题

算法——贪心算法

贪心算法 贪心算法通过一系列的选择来得到问题的解.它所做的每一个选择都是当前状态下局部的最好选择,即贪心选择. 贪心选择的一般特征:贪心选择性质和最优子结构性质. 贪心选择性质: 所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到.这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别.在动态规划算法中,每步所做的选择往往依赖于相关子问题的解.因而只有在解出相关子问题后,才能做出选择.而在贪心算法中,仅在当前状态下做出最好选择,即局部最优选择.

用java写装载问题(用贪心算法和分支界限算法)

问题描述 用java写装载问题(用贪心算法和分支界限算法) 用java写算法中的装载问题,代码~(用分支限界算法和贪心算法写)... 解决方案 http://www.cnblogs.com/tianshuai11/archive/2012/05/04/2490852.html

1.4买书问题之贪心算法和动态规划

对于自己的白痴程度,自己已经快无法忍受了,到现在还不明白贪心算法和动态规划. 1.贪心算法 在对问题求解时,总是做出当前看来最好的选择,也就是说它不从整体最优上加以考虑,而是仅在局部考虑最优解. 虽然,它不能为所有问题提供最优解答,但是对广泛问题能产生整体最优解或近似解. 基本思路: 1.建立数序模型 2.把问题分解若干子问题,依次求解 3.把局部最优解合成原问题的一个解 2.动态规划 通过百度一下,从百度知道得到了一个很好的解答! 动态规划的基本思想就是把全局问题化为局部问题,为了全局优化必须

代码-测试用例约简采用贪心算法来实现,是怎样实现的

问题描述 测试用例约简采用贪心算法来实现,是怎样实现的 如何操作codecover?测试用例它具体是什么,测试覆盖又是怎么样实现的?测试用例约简采用贪心算法,这个代码怎么写的啊? 解决方案 http://wenku.baidu.com/link?url=5j7XO1aTT4GIUhK97xszuqVfSCuamZeYf-x5KsiOQJjaNUYrkgj3WxjkBi4Dh1xR5hf_kse9YhWulNhuQH5iciFVSJaHh4x7s08u6dYrmtK

贪心算法-c语言算法,基数求解最小构成

问题描述 c语言算法,基数求解最小构成 功能:有一组基数值(正整数),输入一个正整数(小于100), 问:如果该数由基数值相加构成(每个基数可以重复使用) ,那么最少可能利用的基数是多少个. #include <stdio.h> #include <stdlib.h> #define MAXSiZE 100 /*#define min(a,b) ((a) <= (b) ? (a) : (b))*/ void main(void) { int num[MAXSiZE+1]; i

求解贪心算法相关问题

问题描述 求解贪心算法相关问题 题目1: 已知X1,X2,X3,-,Xn是直线上的点,现希望用固定长度固定数量的木条去覆盖这些点,请编写程序求最多能够覆盖多少点? 输入要求:输入的第1行为三个整数n,m,k,分别表示直线上点的个数,木条的长度以及数量.输入的第2行有n个整数,表示坐标上的点. 输出要求:输出1行,为最多能够覆盖的点的个数. 输入样例: 8 3 2 10 7 6 1 -5 4 18 20 输出样例: 5 题目2:设n为一自然数,n可以分解成若干个不同的自然数的和,这样的分法有很多种

《算法技术手册》一1.3.1 贪心算法

1.3.1 贪心算法 以下的贪心算法展示了如何找到凸包上的每个点: 1. 删除P中的最低点low--low必须在凸包上. 2. 垂直画一条穿过点low的直线,将剩余的n-1个点分别和点low连线,以垂直直线右侧的点的夹角为正值降序排列,夹角的范围是从90皛-90啊n-2是最右侧的点,而P0是最左侧的点.图1-3中显示了垂直线以及每个点与其的夹角. 3. 以{Pn-2, low, P0}这个顺序组成的点集为基础,在剩余的点中选择可以组成凸包的点--从P1开始,将每个点尝试加至这个点集的尾部,如果

【算法导论】贪心算法之背包问题

        在讨论贪心算法时,我们先了解贪心算法与动态规划之间的区别与联系,后面我们将发现可以用0.1背包问题和部分背包问题来比较贪心算法和动态规划的关系.         我们知道,对于一个最优解问题,贪心算法不一定能够产生一个最优解.因为,如果想要采用贪心算法得到最优解需要满足两个条件:贪心选择性质.最优子结构.         贪心选择性质:一个全局最优解可以通过局部最优解来得到.that is to say,当考虑如何做选择时,我们只考虑对当前问题最佳的选择而不考虑子问题的结果.