【20171020】常用经典算法介绍
来源:互联网 发布:mysql索引失效 in or 编辑:程序博客网 时间:2024/04/27 13:40
一、迭代法
常用来求方程或者方程组近似根的一种常用算法设计方法。
具体求根的时候有两种可能的情况:
a.方程无解,那么迭代就会无限循环;
b.方程有解,但是迭代公式选择不当,或者迭代的初始近似根选择不合理,也会导致迭代的失败。
二、穷举法
对可能的解按照某种顺序逐一检验。
三、递推法
利用问题本身所具有的一种递推关系求问题解的一种方法。
例如,要求问题规模为N的解,已知N = 1时候的解,而且也有明显的递推关系,那么就可以层层递推。
四、递归法
递归就是由求规模由N的的解开始,N—>(N - 1)—>…—>2—>1,而且已知N = 1时的解,然后再递推回来,1—>2—>…—>(N - 1)—>N;
满足递归的算法往往有一个特征,每次往前递归都是用相同的方法,而且结束条件就是递归的终点,然后再回溯到N。之前有总结递归,这里就不多说。典型的有斐波那契数列。
五、回溯法
回溯法也称为试探法,该方法将问题的候选解按照某种顺序进行逐一检验,当发现候选解不可能是解的时候就回溯检验下一个候选解。当当前候选解除了不满足问题规模要求外,满足其他所有要求,那就扩大当前候选解的规模,这个过程称为向前试探。
典型问题有n皇后问题、全排列(之前有写在java每日一练里)。
六、贪心算法
贪心法不追求最优解,只希望得到较为满意的方法。贪心法省去了为找到最优解而穷尽所有可能所耗费的大量时间,他常常以当前情况为基础作为最优选择,不考虑整体情况,所以贪心法不需要回溯。
典型的问题有装箱问题、马踏棋盘问题。
七、分治法
基本思想是把大问题分成多个小问题,再由小问题的解方便构造出大问题的解。昨天归纳的归并排序就是用的这个思想。
典型用法有:汉诺塔问题、比赛安排。
八、动态规划法
基本思想是:将大问题分解成子问题,然后从这些子问题的解得到原问题的解。和分治算法不同的是,动态规划法分解得到的子问题往往不是独立的。
步骤:
1.找出最优解的性质,并刻画其结构特征;
2.递归地定义最优解的值;
3.自顶向上的方式计算最优值;
4.根据计算最优值时得到的信息,构造一个最优解。适合解决的问题:
1.最优子结构。当子问题也有最优解的时候,就存在着最优子结构。
2.重叠子问题。对每个子问题都只计算一次,把解存放在一个需要时就可以查看的表中,而每次查表的时间为常数。
- 【20171020】常用经典算法介绍
- 经典常用算法
- 常用算法经典代码
- ACM常用经典算法
- 常用排序算法介绍
- 常用算法介绍
- 几种常用的经典频谱估计方法原理介绍及Matlab算法实现
- 五大常用经典算法
- Spring常用注解介绍【经典总结】
- 计算几何常用算法介绍
- 计算几何常用算法介绍
- 计算几何常用算法介绍
- STL常用查找算法介绍
- STL常用排序算法介绍
- 常用算法哈希介绍
- 动态规划算法介绍 经典题
- 机器学习(3)经典算法介绍
- c++经典的垃圾回收算法介绍
- 霍夫线变换的原理与实现
- 写一个程序,既能作为Application执行也可以作为Applet程序执行。
- 获取本机的IP地址和Mac地址
- linux使用php动态安装模块mysqli.so(ext/mysqlnd/mysqlnd.h: 没有那个文件或目录)
- 数据结构与算法(Java描述)-5、循环链表仿真链表以及循环链表应用
- 【20171020】常用经典算法介绍
- PullToRefresh ScrollView的Listview和轮播图布局
- 博客搬迁
- 2017.10.20 LeetCode Two Pointers 26. 27.
- 快速排序
- 给定填充0和1的二维二进制矩阵,找到包含所有的最大矩形并返回其区域。
- mysql授权表
- sql内链接,左连接,右链接和多表笛卡儿积
- PullToRefresh ScrollView的Listview和轮播图Fragment布局