ACM 算法竞赛 八大基础算法 模拟法 字符串 递归分治 排序 枚举 贪心 递推

查阅了一些资料,对几个基础算法做一个思路上的汇总。



1.模拟法:

将自然的过程或者语言直白的程序化,比如题目中的求解过程,我们直接程序化模拟求解。

2.字符串处理:

常用的字符串操作,KMP字符串匹配算法(用于复杂度高,需要优化时)。

ACM 算法竞赛 八大基础算法 模拟法 字符串 递归分治 排序 枚举 贪心 递推_第1张图片

3.递归:

古之欲明明德于天下者,先治其国;欲治其国者,先齐其家;欲齐其家者,先修其身;欲修其身者,先正其心;欲正其心者,先诚其意;欲诚其意者,先致其知,致知在格物。物格而后知至,知至而后意诚,意诚而后心正,心正而后身修,身修而后家齐,家齐而后国治,国治而后天下平。

当栈底不可见的时候,我们更适合用递归,当然递归也可以转化为 数组或变量和循环,但大多数情况下没有这个必要。
很多简单的递归我们完全可以利用循环来解决。比如很浅的调用之前的数据,且数据量固定。
和循环相比是两种思考的方向。

4.分治法:

将大的问题转化为很多小问题来解决,比如我要给8个数排序,我可以先给两组4个数排序,给4个数排序可以先给两组两个数排序,这样就讲大问题化成了小问题。

5.排序:

熟练的掌握sort()的用法。sort(arr,arr+len,cmp),了解各大排序法的思想。

6.枚举法:

当可能的结果不多时,我们可以利用模拟法求解,然后利用数组保存,直接利用枚举法进行匹配。

7.贪心算法:

选择目前的最优解,还要选取合适的策略,此处的最优解可以累积成为最后的最优解。对于一些处理过的值,可以进行标记和保存,便于我们从中选择最优解,并在最优解的基础上更加接近最后的最优解。

8.递推法:

分为顺推和逆推,根据相对应的关系和值进行递推,比如斐波那契数列就是顺推。顺推有点像模拟。

你可能感兴趣的:(Algorithm)