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


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

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

学习方法

  • 把所有经典算法写一遍

  • 看算法有关源码

  • 加入算法学习社区,相互鼓励学习

  • 看经典书籍

  • 刷题


基本数据结构和算法

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

链表

  • 链表

  • 双向链表


哈希表/散列表 (Hash Table)

  • 散列函数

  • 碰撞解决


字符串算法

  • 排序

  • 查找


BF算法

KMP算法

BM算法
  • 正则表达式
  • 数据压缩


二叉树

  • 二叉树

  • 二叉查找树

  • 伸展树(splay tree 分裂树)

  • 平衡二叉树AVL

  • 红黑树

  • B树,B+,B*

  • R树

  • Trie树(前缀树)

  • 后缀树

  • 最优二叉树(赫夫曼树)

  • 二叉堆 (大根堆,小根堆)

  • 二项树

  • 二项堆

  • 斐波那契堆(Fibonacci Heap)


图的算法

  • 图的存储结构和基本操作(建立,遍历,删除节点,添加节点)

  • 最小生成树

  • 拓扑排序

  • 关键路径

  • 最短路径: Floyd,Dijkstra,bellman-ford,spfa


排序算法
  • 交换排序算法


冒泡排序

插入排序

选择排序

希尔排序

快排

归并排序

堆排序
  • 线性排序算法


桶排序
  • 查找算法


顺序表查找:顺序查找

有序表查找:二分查找

分块查找: 块内无序,块之间有序;可以先二分查找定位到块,然后再到块中

顺序查找

动态查找: 二叉排序树,AVL树,B- ,B+ (这里之所以叫 动态查找表,是因为表结构是查找的过程中动态生成的)

哈希表: O(1)
  • 15个经典基础算法


Hash

快速排序

快递选择SELECT

BFS/DFS (广度/深度优先遍历)

红黑树 (一种自平衡的二叉查找树)

KMP 字符串匹配算法

DP (动态规划 dynamic programming)

A*寻路算法: 求解最短路径

Dijkstra:最短路径算法 (八卦下:Dijkstra是荷兰的计算机科学家,提出”信号量和PV原语“,"解决哲学家就餐问题",”死锁“也是它提出来的)

遗传算法

启发式搜索

图像特征提取之SIFT算法

傅立叶变换

SPFA(shortest path faster algorithm) 单元最短路径算法

海量数据处理

  • Hash映射/分而治之

  • Bitmap

  • Bloom filter(布隆过滤器)

  • Trie树

  • 数据库索引

  • 倒排索引(Inverted Index)

  • 双层桶划分

  • 外排序

  • simhash算法

  • 分布处理之Mapreduce


算法设计思想

  • 迭代法

  • 穷举搜索法

  • 递推法

  • 动态规划

  • 贪心算法

  • 回溯

  • 分治算法


算法问题选编

这是一个算法题目合集,题目是我从网络和书籍之中整理而来,部分题目已经做了思路整理。问题分类包括:

  • 字符串

  • 堆和栈

  • 链表

  • 数值问题

  • 数组和数列问题

  • 矩阵问题

  • 二叉树


  • 海量数据处理

  • 智力思维训练

  • 系统设计


还有部分来自算法网站和书籍:

  • 九度OJ

  • leetcode

  • 剑指offer


开源项目中的算法
  • YYCache
  • cocos2d-objc


...

推荐阅读

刷题必备

  • 《剑指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块一本


参考链接和学习网站

July 博客

《数学建模十大经典算法》

《数据挖掘领域十大经典算法》

《十道海量数据处理面试题》

《数字图像处理领域的二十四个经典算法》

《精选微软等公司经典的算法面试100题》

The-Art-Of-Programming-By-July

(链接地址:https://github.com/julycoding/ ... -July

微软面试100题

(链接地址:https://blog.csdn.net/v_JULY_v/column/info/ms100

程序员编程艺术

(链接地址:https://blog.csdn.net/v_JULY_v ... 60494

基本算法演示

http://sjjg.js.zwu.edu.cn/SFXX/sf1/sfys.html

http://www.cs.usfca.edu/~galle ... .html

编程网站

leetcode(https://leetcode.com/
openjudge(http://openjudge.cn/) 开放在线程序评测平台

九度OJ(http://ac.jobdu.com/index.php

还有个ACM训练方案

http://www.java3z.com/cwbwebho ... .html
已邀请:

要回复问题请先登录注册

返回顶部