其实算法就这么点东西

学习算法的一些建议


如果想正儿八经的学习算法,首先给出 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、编程网站



以笔试为目的的修炼都是耍流氓。但也许,我们就想当个好流氓。秋招已到,希望大家都能收货满意的offer。


我把我写的所有题解整理成了一本电子书放在了 github 上,三天内冲击到 github 排行榜榜首!近 5w 人下载阅读!要获取的话,直接进入下方链接就可以了(记得给我点个 star):

https://github.com/geekxh/hello-algorithm

其实算法就这么点东西

上一篇:「ACM-ICPC 2018 南京站网络赛 A 题」An Olympian Math Problem


下一篇:Illustrator(AI)设计制作商业文字Logo实例教程