几个常见的简单的算法(暴力法,递推法,枚举法,递归法,分治法,贪心法,回溯法)

最近在学习算法相关知识。
通过买的视频教程了解到了一些简单的算法,为了加深感悟,同时也为了理解,将这几个常见的算法的定义进行记录。
算法是程序的灵魂,也可以认为是程序最重要的部分。
在通过算法解决问题时,感觉就是熟悉题意,明白要解决的问题,将之转化成数学模型,在通过数学思想选择合适正确的解题思路,再将之用代码表现出来。
将数学思想用代码表现出来就是最复杂的部分。

1,暴力法

顾名思义,就是直接对问题进行解决,不寻求简单和高效的方法,大部分问题都可以用暴力法来解决。但是暴力法在解决较为复杂的问题时,往往执行效率不高,需要较长的时间和较大的内存。一般不推荐使用暴力法。

2,递推法

该方法是通过找出相同的数学规律,选择正确的数学公式,进而解决问题。
一般可分为两种:

1 顺推:该方法就是从前向后,由小及大;

2逆推:由后向前,由大及小。

3,枚举法(穷举法)

一般使用循环,从所有条件中找出符合可能的结果,比如说用来解决算术运算的可能解。

4,递归法

为了方便解决问题,反复调用自身、调用函数或子过程。如计算一个数的阶乘。

5,分治法

顾名思义,这种方法为“分而治之”,就是将一个大规模的复杂的问题分解成便于解决的小规模的简单的问题,最后再将这些同等规模大小的的小问题合并成为大的问题。如比赛选手的对阵安排问题(每一个选手每一天都要和不同的选手对阵,列出所有可能)。

6,贪婪(贪心)法

在解决问题时,求出局部最优解,而并不考虑是否是全局最优解。如硬币找零问题,0-1背包问题。

7,回溯(试探)法

回溯法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。如列出中奖的彩票号码。

猜你喜欢

转载自blog.csdn.net/Crazy__1/article/details/87997135