五大常用算法使用情境
2015-10-04 11:29
281 查看
关于五大常用算法,来自随遇而安随缘一世的http://blog.csdn.net/lcj_cjfykx/article/details/41691787,值得大概了解。
贪心算法:在对问题求解时,总是做出在当前看来是最好的选择,有可能陷入局部最优。
分治:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
动态规划:将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。与分治的区别:经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。
回溯:在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。
分支限界:采用广度优先的策略,在问题的解空间树T上搜索问题解。与回溯区别:回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。
例题绘画展览门票每张5元,如果有2n个人排队购票,每人一张,并且其中一半人恰有5元钱,另一半人恰有10元钱,而票房无零钱 可找,那么如何将这2n个人排成一列,顺次购票,使得不至于因票房无零钱可找而耽误时间,应该采用什么算法解决呢?()
题意为排队购票,大的调整肯定不行,否则我直接喊所有5块的站前边,10块的站后边,排队的人肯定不乐意。
所以,必须依着本来的排队顺序,一步一步走,即从根结点出发,一步一步判断。就是分支限界的FIFO搜索:将活节点表组织成一个 队列,并将队列的先进先出原则,选取下一个节点为当前扩展节点。
贪心算法:在对问题求解时,总是做出在当前看来是最好的选择,有可能陷入局部最优。
分治:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
动态规划:将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。与分治的区别:经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。
回溯:在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。
分支限界:采用广度优先的策略,在问题的解空间树T上搜索问题解。与回溯区别:回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。
例题绘画展览门票每张5元,如果有2n个人排队购票,每人一张,并且其中一半人恰有5元钱,另一半人恰有10元钱,而票房无零钱 可找,那么如何将这2n个人排成一列,顺次购票,使得不至于因票房无零钱可找而耽误时间,应该采用什么算法解决呢?()
题意为排队购票,大的调整肯定不行,否则我直接喊所有5块的站前边,10块的站后边,排队的人肯定不乐意。
所以,必须依着本来的排队顺序,一步一步走,即从根结点出发,一步一步判断。就是分支限界的FIFO搜索:将活节点表组织成一个 队列,并将队列的先进先出原则,选取下一个节点为当前扩展节点。
相关文章推荐
- android wifi信号检测
- 虚拟内存(操作系统)
- JSON 数据格式
- 文件搜索命令-用户管理命令
- Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
- 出现No module named numpy的解决办法
- 图片数字时钟
- Python-__builtin__与__builtins__的区别与关系
- poj 1944 模拟(一圈牛要交谈)
- 剑指offer—数组中出现次数超过一半的数字
- 证券基础--发行体制
- Android应用Loaders全面详解及源码浅析
- [leetcode-289]Game of Life(java)
- POJ 2803 Defining Moment(水~)
- PHP iconv()函数转字符编码的问题(转)
- 用python2.7,采集新浪博客
- android---(UI组件)
- VS2015 使用RDLC报表
- Androis Studio -> Gradle基础
- Java设计模式之剩下的模式