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

  对于自己的白痴程度,自己已经快无法忍受了,到现在还不明白贪心算法和动态规划。 

1.贪心算法

  在对问题求解时,总是做出当前看来最好的选择,也就是说它不从整体最优上加以考虑,而是仅在局部考虑最优解。

  虽然,它不能为所有问题提供最优解答,但是对广泛问题能产生整体最优解或近似解。

 基本思路:

  1.建立数序模型

  2.把问题分解若干子问题,依次求解

  3.把局部最优解合成原问题的一个解

2.动态规划

  通过百度一下,从百度知道得到了一个很好的解答!

  动态规划的基本思想就是把全局问题化为局部问题,为了全局优化必须局部优化。

  能用动态规划解决的问题,肯定可以通过搜索解决。可是搜索的方法时间复杂度太高,怎样优化呢?我们一般采用的方法叫做记忆优化搜索,就是搜完某个解之后把它保存起来,下一次搜索到这个地方的时候,调用上一次的搜索结果。这样就解决了重复状态的问题。记忆化搜索就是动态规划的一种实现方法。那么那些状态必须可以转给i状态,于是你就确定了状态转移方程,然后你需要确定边界条件,将边界条件赋予初值,此时就可以从前往后枚举状态进行状态转移了。

  光说不干,等于白看!!在网上搜一下好的题做一下。


本文 由 cococo点点 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:cococo点点 http://www.cnblogs.com/coder2012

时间: 2024-07-30 12:36:07

1.4买书问题之贪心算法和动态规划的相关文章

算法——贪心算法

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

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

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

算法起步之贪心算法

原文:算法起步之贪心算法        我们前面介绍的动态规划算法是求解最优化问题的一种通用方法,但是对于很多的最优化问题是用动态规划有点小题大做了,我们可以使用贪心算法,贪心算法相比动态规划更简单,也更高效.它总是做出局部最优选择,希望这样可以得到全局的最有选择.所以这种方法不能保证得到最优解,但是很多问题却都可以用这种方法.我们先看一个活动选择的例子.        假设我们有n个活动,只有一个教室,求在这个教室中一天最多可以举办多少活动(同一时间只能举办一个活动).下面给出的是活动的开始时

浅析java贪心算法_java

贪心算法的基本思路    1.建立数学模型来描述问题. 2.把求解的问题分成若干个子问题. 3.对每一子问题求解,得到子问题的局部最优解. 4.把子问题的解局部最优解合成原来解问题的一个解. 实现该算法的过程: 从问题的某一初始解出发: while 能朝给定总目标前进一步 do 求出可行解的一个解元素: 由所有解元素组合成问题的一个可行解. 贪心选择性质       所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,换句话说,当考虑做何种选择的时候,我们只考虑对当前问题最佳的

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

问题描述 贪心算法的理解与实例应用 对贪心算法的深刻理解,以及贪心算法的经典应用,对相应的实例进行分析 解决方案 哈夫曼树-贪心算法的应用实例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

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

问题描述 测试用例约简采用贪心算法来实现,是怎样实现的 如何操作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