| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2441 人关注过本帖
标题:常见的算法模式有哪些?
只看楼主 加入收藏
小然然
Rank: 2
等 级:论坛游民
帖 子:8
专家分:10
注 册:2010-3-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
常见的算法模式有哪些?
想知道常见的算法模式有哪些。还有,谁能帮总结一下常见算法模型的原理和应用特点啊?
搜索更多相关主题的帖子: 模式 算法 
2010-03-16 11:59
共饮长江水
Rank: 2
等 级:论坛游民
威 望:1
帖 子:31
专家分:47
注 册:2010-3-16
收藏
得分:10 
贪婪法

贪婪法是一种不追求最优解,只希望得到较为满意解的方法。贪婪法一般可以快速得到满意的解,因为它省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪婪法常以当前情况为基础作最优选择,而不考虑各种可能的整体情况,所以贪婪法不要回溯。
例如平时购物找钱时,为使找回的零钱的硬币数最少,不考虑找零钱的所有各种发表方案,而是从最大面值的币种开始,按递减的顺序考虑各币种,先尽量用大面值的币种,当不足大面值币种的金额时才去考虑下一种较小面值的币种。这就是在使用贪婪法。这种方法在这里总是最优,是因为银行对其发行的硬币种类和硬币面值的巧妙安排。如只有面值分别为1、5和11单位的硬币,而希望找回总额为15单位的硬币。按贪婪算法,应找1个11单位面值的硬币和4个1单位面值的硬币,共找回5个硬币。但最优的解应是3个5单位面值的硬币
 分治法
 字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……  分治法所能解决的问题一般具有以下几个特征:
  1) 该问题的规模缩小到一定的程度就可以容易地解决
  2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。
  3) 利用该问题分解出的子问题的解可以合并为该问题的解;
  4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。

回溯法
 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。
  用回溯法解题的一般步骤:
  (1)针对所给问题,定义问题的解空间;
  (2)确定易于搜索的解空间结构;
  (3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

动态规划法

和贪婪算法一样,在动态规划中,可将一个问题的解决方案视为一系列决策的结果。不同的是,在贪婪算法中,每采用一次贪婪准则便做出一个不可撤回的决策,而在动态规划中,还要考察每个最优决策序列中是否包含一个最优子序列。

分支限界法

分支限界法类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。

由于求解目标不同,导致分支限界法与回溯法在解空间树T上的搜索方式也不相同。回溯法以深度优先的方式搜索解空间树T,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树T。分支限界法的搜索策略是:在扩展结点处,先生成其所有的儿子结点(分支),然后再从当前的活结点表中选择下一个扩展对点。为了有效地选择下一扩展结点,以加速搜索的进程,在每一活结点处,计算一个函数值(限界),并根据这些已计算出的函数值,从当前活结点表中选择一个最有利的结点作为扩展结点,使搜索朝着解空间树上有最优解的分支推进,以便尽快地找出一个最优解。

2010-03-16 16:08
czyzhuo
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:17
帖 子:230
专家分:1459
注 册:2010-3-11
收藏
得分:10 
1.递推法
  递推法是利用问题本身所具有的一种递推关系求问题解的一种方法。它把问题分成若干步,找出相邻几步的关系,从而达到目的,此方法称为递推法。
    递推法是组合数学中的一个重要解题方法,许多著名问题(如menage问题、更列问题、跳蛙问题等)用递推法来解显得精巧简捷.鉴于这一方法在升学和竞赛中应用越来越广泛,掌握和运用这种方法,就显得更加重要.
用递推法解题,首先是要列出符合题意的递归关系式——递归方程,再解所得方程.建模的办法通常是按某一元素(或位置)或某一方式进行分类,再列式,而怎样正确地分类与讨论则是解题的关键.
    例 用1、2、3三个数字写n位数,要求数中不出现紧挨着的两个1.问能构成多少个n位数?
解:设符合条件的n位数共有an种,按首位划分可分成:
    Ⅰ.首位是2或3,则以下n-1位各有an-1个,共2an-1个;
    Ⅱ.首位是1,第二位只能为2或3,共有2an-2个,
    故an=2an-1+2an-2(个).
由初始条件a1=3,a2=8,结合特征方程,求得an= .

2. 递归法
    递归指的是一个过程:函数不断引用自身,直到引用的对象已知。
    递归算法包括“递推”和“回归”两部分。

递推:就是为得到问题的解,将它推到比原问题简单的问题的求解。
比如:为求N!,先求(N-1)!,因为(N-1)!更接近以知解0!=1;
再看看下面的过程:
3!=3*2!;2!=2*1!;1!=1*0!;0!=1;

注意:
(1)递推应有终止之时。例如,N!,当N=0时,0!=1为递推的终止条件,在此条件下,问题的解是明确的,缺少终止条件算法会失败。
(2)简单问题表示离递推终止条件更接近的问题。简单问题与原问题其解的算法是一致的,其差别主要反映在参数值上。例如,N!与(N-1)!其参数差1。参数的变化,使问题递推到有明确解的问题上。

回归:指简单问题得到解后,回归到原问题的解上来。
    例如:当计算完(N-1)!后,回归计算N*(N-1)!,即得N!。注意:回归是递推的返回过程。
比如:0!=1;1!=1*0!;2!=2*1!;3!=3*2!

3.穷举搜索法
  穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解。
    穷举法的思路是,列举出所有可能的情况,逐个判断有哪些是符合问题所要求的条件,从而得到问题的解答。
    穷举算法模式:
        (1)问题解的可能搜索的范围:用循环或循环嵌套结构实现;
        (2)写出符合问题解的条件;
        (3)能使程序优化的语句,以便缩小搜索范围,减少程序运行时间。

4.贪婪法
  贪婪法是一种不追求最优解,只希望得到较为满意解的方法。贪婪法一般可以快速得到满意的解,因为它省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪婪法常以当前情况为基础作最优选择,而不考虑各种可能的整体情况,所以贪婪法不要回溯。
    贪婪法之所以贪婪在于,只顾眼前利益,每一次找到的都是当前的最优解,而不是最终的最优解。
使用范围:
贪心选择性质:选择具有无后效性,即不依赖与以后将要作出的选择。
最优子结构:全局最优包含局部最优。
不能使用的范围:
1、 需要求解最值
2、 求出的解规定是最优解

5.分治法
  把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。即对问题分而治之。

6.动态规划法
  动态规划是一种在数学和计算机科学中使用的,用于求解包含重叠子问题的最优化问题的方法。其基本思想是,将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。动态规划的思想是多种算法的基础,被广泛应用于计算机科学和工程领域。

7.迭代法
  迭代是数值分析中通过从一个初始估计出发寻找一系列近似解来解决问题(一般是解方程或者方程组)的过程,为实现这一过程所使用的方法统称为迭代法。
    迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为f(x)=0,用某种数学方法导出等价的形式x=g(x),然后按以下步骤执行:
    (1)   选一个方程的近似根,赋给变量x0;
    (2)   将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0;
    (3)   当x0与x1的差的绝对值还小于指定的精度要求时,重复步骤(2)的计算。
    若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根。
2010-03-17 11:27
小然然
Rank: 2
等 级:论坛游民
帖 子:8
专家分:10
注 册:2010-3-15
收藏
得分:0 
谢谢大家
2010-03-18 06:59
快速回复:常见的算法模式有哪些?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015749 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved