算法概述——目前关于算法的认识

	断断续续刷了50道左右算法题了,也看了一些常用的解决面试算法题的博客。想小小总结面试算法题的思路,并打算后续把刷到的常用算法题思路陆续写一些博客。
一、刷题目的:
1、复习编程语言
2、熟悉常见的数据结构和算法
3、学习别人的编程思维
二、抽象思维
1、时刻不忘未知量,清醒求什么
2、试错,用自身已有方法和已知条件进行尝试
3、回忆求解类似题目的方法,与做过的题的相同结构、性质
4、先尝试用特例解决问题,再尝试一般化
5、反过来推导
三、常用数据结构
1、Stack:后进先出
2、Linked List:链表可以快速地插入、删除,但查找较为费时
3、Hash Table:利用Hash函数来将数据映射到一块区域,方便O(1)的时间内以读取以及修改。
4、Tree:树在计算机中有着广泛应用。常用的有:二叉搜索树、红黑树、B+树,树的建立、遍历、删除都比较复杂, 通常使用递归的思路。
5、Heap:特殊的完全二叉树,“等级森严”,可以用O(nlogn)的时间复杂度来进行排序,可以用O(nlogk)的时间复杂度找出n个树中最大(小)的k个。
五大算法思想:
1、分而治之:有点类似“大事化小、小事化了”的思想,经典的归并排序和快速排序都用到这个思想。
2、动态规划:有点类似数学的归纳总结法,找出状态转移方程,然后逐步求解。
3、贪心算法:有时只顾局部利益,最终也会有好的全局收益。
4、搜索算法:在有限的解空间找出满足条件的解,深度和广度通常比较费时间,二分搜索每次可以将问题规模缩小一半,所以比较高效。
5、回溯:不断地去试错,同时注意回头是岸,走不通就换条路,最终也能找到解决问题的方法或者知道问题误解。
	有时候,还有一部分问题可能需要一些数学知识去求解,比如位运算。

你可能感兴趣的:(算法提升——剑指Offer)