记算法思维

目的

其实就是想总结一下自己做题中用到的思考方式,虽然我知道即使写了也没用😭(还是要靠多多刷题)。本文纯粹瞎写。

正文

模拟思维:

模拟思维是最常见的做题方式:按照题意和样例的操作,一步步模拟过程,从中理解到问题的本质。一般看不懂题目也需要进行合理的模拟进行突破,或者直接通过模拟得出答案。

暴力思维:

暴力思维就是对于数据量小的题目,可以枚举所有状态来得到答案。涉及到的知识:打表,dfs(递归),状压dp。

排序思维:

排序思维就是对于题目给出的数据,经过一定的排序后,可以在复杂度较低内解决题目的问题。而且,很多题目都是要先排序后才能对数据进行处理。涉及到的知识:c++ stl sort,莫队。

离散思维:

离散思维其实就是离散化存数据。这种思维最经典的应用是桶排序,也就是俗称的“开桶”。离散化思维一般可以简化问题,降低复杂度。在一些有关数据结构的题,也会搭配离散化思维。离散化思维的关键就是:让数据离散后变得有序,方便处理。

贪心思维:

贪心,是在每一步选择中采取优先策略,从而得到答案的思维。前提是:要保证每一步采取这个优先策略肯定是得到正确的最优解。涉及到的知识:dijkstra算法,最小生成树。

分解思维:

分解,一般是对于复杂的问题,可以分解成小问题(子问题),然后从这些子问题来推出最终问题的答案。涉及到的知识有:动态规划,分治,分块。

优化思维:

优化思维一般是碰到直接做题目复杂度高的情况,这时需要进行时间的优化。当然排序是最简单的优化,除此之外,还有利用前缀和,数据结构的优化。涉及到的数据结构:栈(包括单调栈),队列(包括单调队列),堆(或者优先队列),线段树(简单形式:树状数组),并查集。当然,优化思维最重要的不是用怎样优化(用什么数据结构优化),而是优化什么(目的)。

想说的话

其实上面的思维都是基础的东西,关键还是要自己多学相关算法和多做相关题目,才能得到实际的提高(不过,对于新人(以前没参加过算法竞赛)来说我觉得上面是必须要了解的思维,不然做题效率很慢😂)

暂更???

posted @ 2019-06-29 21:47  MrEdge  阅读(309)  评论(0编辑  收藏  举报