记算法思维
目的
其实就是想总结一下自己做题中用到的思考方式,虽然我知道即使写了也没用😭(还是要靠多多刷题)。本文纯粹瞎写。
正文
模拟思维:
模拟思维是最常见的做题方式:按照题意和样例的操作,一步步模拟过程,从中理解到问题的本质。一般看不懂题目也需要进行合理的模拟进行突破,或者直接通过模拟得出答案。
暴力思维:
暴力思维就是对于数据量小的题目,可以枚举所有状态来得到答案。涉及到的知识:打表,dfs(递归),状压dp。
排序思维:
排序思维就是对于题目给出的数据,经过一定的排序后,可以在复杂度较低内解决题目的问题。而且,很多题目都是要先排序后才能对数据进行处理。涉及到的知识:c++ stl sort,莫队。
离散思维:
离散思维其实就是离散化存数据。这种思维最经典的应用是桶排序,也就是俗称的“开桶”。离散化思维一般可以简化问题,降低复杂度。在一些有关数据结构的题,也会搭配离散化思维。离散化思维的关键就是:让数据离散后变得有序,方便处理。
贪心思维:
贪心,是在每一步选择中采取优先策略,从而得到答案的思维。前提是:要保证每一步采取这个优先策略肯定是得到正确的最优解。涉及到的知识:dijkstra算法,最小生成树。
分解思维:
分解,一般是对于复杂的问题,可以分解成小问题(子问题),然后从这些子问题来推出最终问题的答案。涉及到的知识有:动态规划,分治,分块。
优化思维:
优化思维一般是碰到直接做题目复杂度高的情况,这时需要进行时间的优化。当然排序是最简单的优化,除此之外,还有利用前缀和,数据结构的优化。涉及到的数据结构:栈(包括单调栈),队列(包括单调队列),堆(或者优先队列),线段树(简单形式:树状数组),并查集。当然,优化思维最重要的不是用怎样优化(用什么数据结构优化),而是优化什么(目的)。
想说的话
其实上面的思维都是基础的东西,关键还是要自己多学相关算法和多做相关题目,才能得到实际的提高(不过,对于新人(以前没参加过算法竞赛)来说我觉得上面是必须要了解的思维,不然做题效率很慢😂)
暂更???