算法策略的总结

策略是面向问题的,算法是面向实现的。

一、不同算法策略特点小结

1、贪心策略

贪心策略一方面是求解过程比较简单的算法,另一方面它又是对能适用问题的条件要求最严格(即适用范围很小)的算法。

贪心策略解决问题是按一定顺序,在只考虑当前局部信息的情况下,就做出一定的决策,最终得出问题的解。

即:通过局部最优决策能得到全局最优决策

2、递推策略

递推也是由当前问题的逐步解决从而得到整个问题的解,依赖于信息间本身的递推关系,每一步不需要决策参与到算法中,更多用于计算

3、递归策略

递归常常用于分治算法、动态规划算法中。

递归是利用大问题与其子问题间的递推关系来解决问题的。

能采用递归策略的算法一般有以下特征:

(1)为求解规模为N的问题,设法将它分解成规模较小的问题,然后从这些小问题的解方便地构造出大问题的解

(2)并且这些规模较小的问题也能采用同样的分解和综合方法,分解成更小的问题,并从这些更小的问题的解构造出规模较大问题的解

(3)特别的,当规模N = 1时,能直接得解

4、枚举策略

对问题所有的解逐一尝试,从而找出问题的真正解。一般用于决策类问题,很难找到大、小规模之间的关系,也不易对问题进行分解。

5、递归回溯策略

类似于枚举,通过尝试遍历问题各个可能解的通路,当发现此路不通时,回溯到上一步继续尝试别的通路。

6、分治策略

分治一般用于较复杂的问题,必须可以逐步被分解为容易解决的独立的子问题,这些子问题解决后,进而将它们的解“合成”,就得到较大问题的解,最终合成为总问题的解。

7、动态规划策略

与贪心类似,也是通过多阶段决策过程来解决问题。每个阶段决策的结果是一个决策结果序列,这个结果序列中,最终哪一个是最优的结果,取决于以后每个阶段的决策,当然每次决策结果序列都必须进行存储。因此是“高效率,高消费的算法”。

同时,它又与递归法类似,当问题不能分解为独立的阶段,却又符合最优化原理时,就可以使用动态规划法,通过递归决策过程,逐步找出子问题的最优解,从而决策出问题的解。

二、算法策略间的关系

1、对问题进行分解的算法策略——分治法与动态规划法

共同点:(1)分治法与动态规划法实际上都是递归思想的运用

(2)二者的根本策略都是对问题进行分解,找到大规模与小规模的关系,然后通过解小规模的解,得出大规模的解

不同点: 适用于分治法的问题分解成子问题后,各子问题间无公共子子问题,而动态规划法相反。

动态规划法 = 分治算法思想 + 解决子问题间的冗余情况

2、多阶段逐步解决问题的策略——贪心算法、递推法、递归法和动态规划法

贪心算法:每一步都根据策略得到一个结果,并传递到下一步,自顶向下,一步一步地做出贪心决策。

动态规划算法:每一步决策得到的不是一个唯一结果,而是一组中间结果(且这些结果在以后各步可能得到多次引用),只是每一步都使问题的规模逐步缩小,最终得到问题的一个结果。

递推、递归法:注重每一步之间的关系,决策的因素较少。递推法是根据关系从前向后推导,从小规模问题的结论推解出大问题的解。而递归法是根据关系从后向前使大问题转化为小问题,最后同样由小规模问题的解推解出大问题的解。

3、全面逐一尝试、比较——蛮力法、枚举法、递归回溯法

蛮力策略(即枚举和递归回溯):

当问题找不到信息间的相互关系、也不能将问题分解为独立的子问题,就只有把全部解都列出来之后,才能判定和推断出问题的解。

蛮力策略适用于规模不大的问题。

(1)枚举法:实现依赖于循环。所以一个枚举法只针对一个特定问题规模的情况,例如:八重循环嵌套解八皇后问题的算法。

(2)递归回溯法:适用于任意指定规模的情况,例如:递归回溯法解N皇后问题。

4、算法策略的中心思想

用算法策略将解决问题的过程归结为:用算法的基本工具“循环机制和递归机制”实现。

三、算法策略侧重的问题类型

一般常遇到的问题分为四类:

(1)判定性问题:可用递推法、递归法

(2)计算问题:可用递推法、递归法

(3)最优化问题:贪心算法、分治法、动态规划法、枚举法

(4)构造性问题:贪心算法、分治法、广度优先搜索、深度优先搜索

时间: 2024-12-10 03:33:06

算法策略的总结的相关文章

内存布局------c++程序设计基础、编程抽象与算法策略

图中给出了在一个典型c++程序中如何组织内存的框架.程序中的指令(在底层都是按位存储的)和全局变量往往被存储在静态去(static area),该区域位于地址编址号较小的接近机器地址空间的开始处.该区域所分配的内存量在程序运行期间不会发生改变. 内存中的最高地址区表示栈区(stack area).当你的程序每调用一个函数或者方法,计算机就会在这个内存区创建一个新的栈帧.当函数返回时,所创建的栈帧会被撤销,以为后续的函数调用所需的栈帧释放内存. 处于栈区和静态区之间的内存区域被称为堆区(heap

声明函数指针------c++程序设计基础、编程抽象与算法策略

#include<iostream> using namespace std; double a(double aa) { return aa; } int main() {int aa = 9; a(1.0); double(*fn)(double) = a;; cout << a(1.0)<<endl; cout << fn(1.0) << endl; cout << fn << endl; cout <<

11算法策略之动态规划

动态规划 在动态规划算法策略中,体现在它的决策不是线性的而是全面考虑不同的情况分别进行决策, 并通过多阶段决策来最终解决问题.在各个阶段采取决策后, 会不断决策出新的数据,直到找到最优解.每次决策依赖于当前状态, 又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,故有"动态"的含义.所以,这种多阶段决策最优化的解决问题的过程称为动态规划. [例1]数塔问题 有形如图4-11所示的一个数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一直走到底层,要求找出一条路径,使路

五大常见算法策略——递归与分治策略

摘要:递归与分治策略是五大常见算法策略之一,分治策略的思想就是分而治之,即先将一个规模较大的大问题分解成若干个规模较小的小问题,再对这些小问题进行解决,得到的解,在将其组合起来得到最终的解.而分治与递归很多情况下都是一起结合使用的,能发挥出奇效(1+1>2),这篇文章我们将先从递归说起,再逐渐向分治过渡,主要讲解方式是通过9个例题来说明问题的,问题都是根据难度由简到难,由浅入深,对递归与分治能有个大概的了解雏形,当然最重要还是要做大量练习才能掌握. 1.递归 我们第一次接触递归一般都是在初学C语

跳棋算法策略

棋子跳动算法该算法在ChessBoard.CanJumpTo函数中实现 ? 找出一个棋子所有可走位置,并建成数据结构"图"的形式这个算法有点象图的广度优先遍历算法.文字说明如下:1.把当前棋子坐标加入"图"中.2.从当前棋子位置出发,从六个方向查找棋子可跳的位置,3.如果第2步找到坐标没有加入"图"中,就把这些坐标加入"图"中去.4.从第3步刚加入"图"中的坐标出发,继续执行第2步.一直到没有坐标加入&qu

对复合(协作)算法/策略的封装方法——装饰模式总结

前言 装饰模式顾名思义就是在不改变原对象的前提下,将新功能优雅的附加(装饰)到该对象上,可以实现对复合算法(策略)的优雅封装.对需要协作的算法(策略)进行有机组合. 装饰模式和策略模式用法类似,但是也有明显区别——策略模式运行时只能运行一个算法,且其各个算法(算法族)之间必须相互独立,不能有联系,装饰模式没有这些约束. 装饰模式和策略模式一样,也是对继承的一种替代方案——使用对象组合的方式,做到运行时装饰对象,从而优雅的替代死板的继承. 另外,装饰模式是对象的结构型模式. 再议继承的缺陷 在策略

10算法策略之贪婪法

贪婪算法 贪婪法又叫登山法, 它的根本思想是逐步到达山顶,即逐步获得最优解.贪婪算法没有固定的算法框架,算法设计的关键是贪婪策略的选择.一定要注意,选择的贪婪策略要具有无后向性.某状态以后的过程和不会影响以前的状态,只与当前状态或以前的状态有关,称这种特性为无后效性. 可绝对贪婪问题 [例1]键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小. 输入数据均不需判错.输出应包括所去掉的数字的位

五大常用算法

http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741370.html 分治算法 一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题--直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并.这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)-- 任何一个可以用计

大数据日知录:架构与算法

大数据丛书 大数据日知录:架构与算法(大数据领域专家力作,专注大数据架构和算法,全面梳理大数据相关技术) 张俊林 著   ISBN 978-7-121-24153-6 2014年9月出版 定价:69.00元 404页 16开 编辑推荐 这是一本心血之作,历时3年,质量上乘. 从架构与算法的角度,比较全面地分门别类梳理了大数据相关技术. 本书内容紧跟技术前沿,讲解深入浅出,适合大数据领域所有技术人员. 书中还列有作者优选的高质量文献,能为读者节省选择的时间,绝对值得一读. 内容提要 大数据是当前最