算法是一个思考过程,独特的见解很重要!!!
撇开实际问题,单纯讨论一个算法的好坏优劣是没有意义的,在解决一个实际问题中,“好的算法”并不一定有效,“差的算法”并不一定就不是最适合的算法,往往一个算法与实际问题的契合度最为关键。
那么什么是最好的算法:针对一个实际问题,考量各方面的因素,选择一个算法的大的方向和众多可以优化的小点,不断去优化的算法是针对这个问题的最好的算法。
2 实际问题中我们可用的计算资源,计算效率的要求?等等都是考量因素。
3 稳定性要求?总体性要求?性能要求?速度和效率要求?算法的评估标准是什么?
2 当没有思路的时候(从哪里入手):
(a)给自己几个简单的测试用例,试验一下
(b)不要忽视暴力解法,暴力解法通常是思考的起点
(c)优化算法:遍历常见的算法思路、数据结构、空间和时间的交换(哈希表)
预处理信息(排序)、在瓶颈处寻找答案
(d)实际编写问题
2 基础数据结构和算法的实现:堆、二叉树、图
3 基础数据结构的使用:链表、栈、队列、哈希表、图、Trie、并查集...
4 基础算法:深度优先、广度优先、二分查找、递归...
5 基本算法思想:递归、分治、回溯搜索、贪心、动态规划...
撇开实际问题,单纯讨论一个算法的好坏优劣是没有意义的,在解决一个实际问题中,“好的算法”并不一定有效,“差的算法”并不一定就不是最适合的算法,往往一个算法与实际问题的契合度最为关键。
那么什么是最好的算法:针对一个实际问题,考量各方面的因素,选择一个算法的大的方向和众多可以优化的小点,不断去优化的算法是针对这个问题的最好的算法。
可以考量的潜在因素:
1 考虑数据有什么特征规律,数据的存出状况,数据结 构,数据量2 实际问题中我们可用的计算资源,计算效率的要求?等等都是考量因素。
3 稳定性要求?总体性要求?性能要求?速度和效率要求?算法的评估标准是什么?
4 我们真正要解决的是什么问题?
解决算法面试问题的整体思路(宏观):
1 题目中的条件:数据规模、算法复杂度、空间需求2 当没有思路的时候(从哪里入手):
(a)给自己几个简单的测试用例,试验一下
(b)不要忽视暴力解法,暴力解法通常是思考的起点
(c)优化算法:遍历常见的算法思路、数据结构、空间和时间的交换(哈希表)
预处理信息(排序)、在瓶颈处寻找答案
(d)实际编写问题
基础准备:
1 各种排序算法(特点以及比较)2 基础数据结构和算法的实现:堆、二叉树、图
3 基础数据结构的使用:链表、栈、队列、哈希表、图、Trie、并查集...
4 基础算法:深度优先、广度优先、二分查找、递归...
5 基本算法思想:递归、分治、回溯搜索、贪心、动态规划...
tip: Sunweitom 8207136