学习算法的一些建议
如果想正儿八经的学习算法,首先给出 3 条建议:
- 对基础算法进行系统学习,全部手敲一遍(推荐书籍:算法四)
- 系统进行刷题,100 道题入门,200 道题拔高,300 道题拿 offer。
- 找到合适的学习伙伴,多和别人讨论,形成自己的思维。公众号内可回复:进群,加入刷题群
1、基础数据结构和算法
-
链表
- 单链表
- 双链表
- 循环链表
-
哈希表
- 散列函数
- 碰撞解决(冲突解决)
-
字符串
- 哈夫曼压缩算法
- LZW 压缩
- 匹配原理(多路径匹配)
- 状态机
- BF(暴风算法)
- KMP(看毛片算法)
- Sunday(这个很重要)
- 排序
- 查找
- 正则表达式
- 数据压缩
-
树
- 二叉树
- 最优二叉树(赫夫曼树))
- 二叉查找树(BST)
- 伸展树(splay tree 分裂树)
- 平衡二叉树 AVL
- 红黑树
- B 树,B+,B*
- R 树
- Trie 树(前缀树)
- 后缀树
- 二叉堆 (大根堆,小根堆)
- 二项树
- 二项堆
-
图的算法
- 图的存储
- 基本操作(建立,遍历,删除节点,添加节点)
- 最小生成树
- 拓扑排序
- 关键路径
- 最短路径: Floyd,Dijkstra,bellman-ford,spfa
-
排序
- 交换排序(包括 快速排序)
- 插入排序(包括 希尔排序)
- 选择排序(包括 堆排序)
- 归并排序
- 桶排序
-
查找
- 顺序表查找:顺序查找
- 有序表查找:二分查找
- 块内有序:通过二分定位到块,再进行查找。
- 动态查找: 二叉排序树,AVL 树,B- ,B+(在查找的过程中动态生成表结构)
- 哈希表:O(1)
2、面试常考数据结构和算法
- DP (动态规划) 大厂必问
- KMP 校招
- 快速排序 校招
- BFS/DFS (广度/深度优先遍历)重要
- 红黑树 (一种自平衡的二叉查找树)校招
- Dijkstra:最短路径算法 校招
- LRU 社招
3、算法设计思想
- 穷举搜索法 (暴力破解法,对可能的解的众多候选按照某种顺序逐一枚举和检验)
- 递归法 (斐波那契数列、快排都是典型的递归应用。关键点在于确定递归公式和确定边界条件)
- 动态规划 (将复杂的问题分解成一系列的子问题;DP 通常基于一个递推公式及一个(或多个)初始状态,当前子问题解由上一次子问题解推出)
- 贪心算法 (找到第一个合乎心意的解法,典型题目:硬币找零问题)
- 回溯 (探针法,找不到问题答案就向回走。典型题目:八皇后问题)
- 分治算法(将一个难以直接解决的大问题,分割成一些规模较小的相同问题,各个击破,分而治之。分治算法常用递归实现)
4、书目推荐
- 刷题
- Leetcode 前 200 道题 (初学者建议)
- 剑指 offer (牛客网可以直接练习)
- 程序员代码面试指南(中级读者)
- 思维提高
- 算法谜题
- 编程之美 (从另一个角度学习算法)
- 基础
- 算法四 (排序,查找,图,字符串四章值得精读)
- 编程珠玑
- 算法设计
- 算法引论(从创造算法的角度思考问题)
- 算法导论(算法字典)
5、编程网站
- Leetcode(社招练习)
- ACM
- USACO: http://train.usaco.org/usacogate
- 瓦拉杜利德大学(UVA):http://acm.uva.es/
- 乌拉尔大学(URAL):http://acm.timus.ru/
- 萨拉托夫大学(SGU):http://acm.sgu.ru/
- EL Judge(MIPT): http://acm.mipt.ru/judge/problems.pl
- 南阳理工http://acm.nyist.net/JudgeOnline/problemset.php
- 浙江大学 http://acm.zju.edu.cn
- 北京大学 http://acm.pku.edu.cn/JudgeOnline
- 天津大学 http://acm.tju.edu.cn
- 厦门大学 http://acm.xmu.edu.cn/JudgeOnline
- 福州大学 http://acm.fzu.edu.cn
- 华中科技 http://acm.hust.edu.cn/JudgeOnline
- 宁波理工 http://acm.nit.net.cn
- 合肥工大 http://acm.tdzl.net:83/JudgeOnline
- 汕头大学 http://acm.stu.edu.cn
- 北大内部 http://ai.pku.cn/JudgeOnline
- 中国科大 http://acm.ustc.edu.cn
- 暨南大学 http://202.116.24.78/JudgeOnline
- 浙江工业 http://acm.zjut.edu.cn
- 中山大学 http://202.116.77.69/sicily
- 福建师范 http://acm.fjnu.edu.cn
- 哈工业大 http://acm.hit.edu.cn/ojs/ojs.php
- 杭电科大 http://acm.hziee.edu.cn
- 四川大学 http://acm.scu.edu.cn/soj
- 哈工程大 http://acm.hrbeu.edu.cn
- 武汉大学 http://acm.whu.edu.cn/learn/
- 同济大学 http://acm.tongji.edu.cn
- 湖南大学 http://acm.hnu.cn:8080/online/
- 上海大学 http://pc.shu.edu.cn/openjudge/problemlist.php
- 兰州大学 http://acm.sundayclub.cn/JudgeOnline/problemlist
- 浙江大学(ZJU):http://acm.zju.edu.cn/ ?
- 北京大学(PKU):http://acm.pku.edu.cn/JudgeOnline/
- 杭州电子科技大学(HDU):http://acm.hziee.edu.cn/
- 同济大学(TJU):http://acm.tongji.edu.cn/
- 中国科技大学(USTC):http://acm.ustc.edu.cn/
- 哈尔滨工业大学(HIT):http://acm.hit.edu.cn/
- 湖南大学(HNU):http://acm.hnu.cn:8080/online/
- 天津大学(TJU):http://cs.tju.edu.cn/acm/
- 四川大学(SCU):http://acm.scu.edu.cn/
- 汕头大学(STU):http://acm.stu.edu.cn/
- 福州大学(FZU):http://acm.fzu.edu.cn/
- 厦门大学(XMU):http://acm.xmu.edu.cn/JudgeOnline/
- 福建师范大学(FJNU):http://acm.fjnu.edu.cn/
- 华中科技大学(HUST):http://acm.hust.edu.cn/JudgeOnline/
- 华东师范大学(ECNU):http://acm.cs.ecnu.edu.cn/
- 浙江工业大学(ZJUT):http://acm.zjut.edu.cn/
- 浙江师范大学(ZJNU):http://acm.zjnu.cn/
- 高效信息学在线判题系统(VIJOS):http://www.vijos.cn/
6、最后
以笔试为目的的修炼都是耍流氓。但也许,我们就想当个好流氓。秋招已到,希望大家都能收货满意的offer。
我把我写的所有题解整理成了一本电子书放在了 github 上,三天内冲击到 github 排行榜榜首!近 5w 人下载阅读!要获取的话,直接进入下方链接就可以了(记得给我点个 star):
https://github.com/geekxh/hello-algorithm