算法学习笔记

算法虐我千百遍,我待算法如初恋

这里的内容是我学习算法过程的一些记录,希望能一直坚持下去。

学习方法

把所有经典算法写一遍看算法有关源码加入算法学习社区,相互鼓励学习看经典书籍刷题

基本数据结构和算法

这些算法全部自己敲一遍:

链表

链表双向链表

二叉树

二叉树二叉查找树伸展树(splay tree 分裂树)平衡二叉树AVL红黑树B树,B+,B*R树Trie树(前缀树)后缀树最优二叉树(赫夫曼树)二叉堆 (大根堆,小根堆)二项树二项堆斐波那契堆(Fibonacci Heap)

哈希表/散列表 (Hash Table)

散列函数碰撞解决

字符串算法

排序查找BF算法KMP算法BM算法正则表达式数据压缩

图的算法

图的存储结构和基本操作(建立,遍历,删除节点,添加节点)最小生成树拓扑排序关键路径最短路径: Floyd,Dijkstra,bellman-ford,spfa

排序算法

交换排序算法

冒泡排序插入排序选择排序希尔排序快排归并排序堆排序

线性排序算法

桶排序

查找算法

顺序表查找:顺序查找有序表查找:二分查找分块查找: 块内无序,块之间有序;可以先二分查找定位到块,然后再到块中顺序查找动态查找: 二叉排序树,AVL树,B- ,B+ (这里之所以叫 动态查找表,是因为表结构是查找的过程中动态生成的)哈希表: O(1)

15个经典基础算法

Hash快速排序快递选择SELECTBFS/DFS (广度/深度优先遍历)红黑树 (一种自平衡的二叉查找树)KMP 字符串匹配算法DP (动态规划 dynamic programming)A*寻路算法: 求解最短路径Dijkstra:最短路径算法 (八卦下:Dijkstra是荷兰的计算机科学家,提出”信号量和PV原语“,"解决哲学家就餐问题",”死锁“也是它提出来的)遗传算法启发式搜索图像特征提取之SIFT算法傅立叶变换SPFA(shortest path faster algorithm) 单元最短路径算法

海量数据处理

Hash映射/分而治之BitmapBloom filter(布隆过滤器)Trie树数据库索引倒排索引(Inverted Index)双层桶划分外排序simhash算法分布处理之Mapreduce

算法设计思想

迭代法穷举搜索法递推法动态规划贪心算法回溯分治算法

刷题必备

《剑指offer》

《编程之美》

《结构之法:面试和算法心得》

《算法谜题》 都是思维题

基础

《编程珠玑》Programming Pearls

《编程珠玑(续)》

《数据结构与算法分析》

《Algorithms》 这本近千页的书只有6章,其中四章分别是排序,查找,图,字符串,足见介绍细致

算法设计

《算法设计与分析基础》

《算法引论》 告诉你如何创造算法 断货

《Algorithm Design Manual》算法设计手册 红皮书

《算法导论》 是一本对算法介绍比较全面的经典书籍

《Algorithms on Strings,Trees and Sequences》

《Advanced Data Structures》 各种诡异高级的数据结构和算法 如元胞自动机、斐波纳契堆、线段树 600块

延伸阅读

《深入理解计算机系统》

《TCP/IP详解三卷》

《UNIX网络编程二卷》

《UNIX环境高级编程:第2版》

《The practice of programming》 Brian Kernighan和Rob Pike

《writing efficient programs》 优化

《The science of programming》 证明代码段的正确性 800块一本

链接:http://www.imooc.com/article/3669