现在的位置: 首页 > 综合 > 正文

算法概述

2017年12月11日 ⁄ 综合 ⁄ 共 1232字 ⁄ 字号 评论关闭

1,归纳法
这种方法基于众所周知的数学归纳证明技术。从本质上来说,给出一个带有参数N的问题,如果可以求解参数小于N的同样的问题实例,那么这个问题的解法转化为如何将这种解法扩展到带有参数N的实例。

常见的算法有:基数排序,寻找多数元素

2,分治法
一个分治算法在解决问题时,会将问题实例划分成若干个子实例(多数情况是两个),并分别递归地解决每个子实例,然后把这些子实例的解组合起来,得到原问题的解。
注意:在划分子问题的过程中,子问题规模较小且结构与原问题相似,可能出现重复的子问题,重复处理的情况

常见的算法有:快排,寻找第K小元素

3,动态规划
将待求解的问题分解成若干个相互联系的子问题,先求解子问题,然后从这些子问题的解得到原问题的解;对于重复出现的子问题,只在第一次遇到的时候对它进行求解,并把答案保存起来,让以后再次遇到时直接引用答案,不必重新求解。动态规划广泛应用于求解组合最优化问题。

动态规划的设计步骤:描述最优解的结构,递归定义最优解的值,按自底向上的方式计算最优解,由计算出的结果创造一个最优解

常见的算法:最长公共子序列,背包问题(深入可以阅读《背包九讲》)



4,贪心算法
贪心算法通过一系列的选择得到问题的解,它所作的选择是当前状态下局部最优的选择,这种启发式的策略并不总能奏效(最终的选择不一定是整个问题的最优解),但一定是次优解。

贪心算法的要素:贪心选择性质:指所求问题的整体最优解可以通过一系列局部最优的选择达到;最优子结构:一个问题的最优解包含其子问题的最优解

贪心算法通常用来求解最优化问题,即量的最大化或最小化

常见算法:最短路径(DIJKSTRA),最小生成树(Kruskal,Prim)

5,回溯法
顾名思义,回溯法就是先构造解的一部分,再决定是继续构造解还是退回。回溯法又称试探法,通常采用深度优先搜索,从一条路向前走,能进则进,不能进则退回来,换一条路再试试。

常见算法:分治限界,8皇后问题


6,查找算法要素:
查找空间:也常被称为解空间。所谓查找,就是在该查找空间中找寻符合我们要求的解的过程;
查找目标:我们需要一个目标来判断查找空间中的各个元素是否符合我们的要求,以便判断查找活动是否已经成功。
查找方法:即利用某种特定的策略在查找空间中查找各个元素。不同的策略对查找的效率和结果有不同的影响,所以对于某个特定的问题,我们要选择切实可行的策略来查找解空间,以期事半功倍。


7,基于排序的算法复杂度下界:
我们之所以可以导出应用比较的排序问题的下界。因为并不是所有的排序问题都基于比较的,例如基数排序和桶排序。这个导出是基于决策树的模型:设T是一棵至少有N!个叶子的二叉树,则T的高度至少是nlogn -1.5n = Omega(nlogn);即任何基于比较的对N个元素排序的算法,在最坏的情况下必须执行Omega(nlogn)次比较

参考资料:算法设计技巧与分析 Algorithms Design Techniques and Analysis   M.H.Alsuwaiyel

【上篇】
【下篇】

抱歉!评论已关闭.