数据结构和算法[精选],传送门:
http://www.acmerblog.com/data-structure-algorithm-6107.html
文章包括以下内容:
数据结构
线性表:链表反转,跳跃表(Skip List)-实现(Java),链表排序,链表中倒数第k个结点, 调整数组顺序使奇数位于偶数前面
二叉树:二分查找树转化为排序的循环双链表,寻找二叉树两个节点的最低公共祖先,不使用递归和栈中序遍历二叉树,有序链表转化为平衡的二分查找树,找出二叉树中某个节点的所有祖先节点, 不使用递归和栈中序遍历二叉树, 二叉树非递归中序遍历, 二叉树非递归先序遍历, 二叉查找树的后序遍历结果,
栈:包含min函数的栈,直方图最大面积,中缀表达式转为后缀表达式,寻找下一个较大元素, 用栈来实现表达式求值
算法
排序和查找:无处不在的二分查找 ,基数排序(Radix Sorting),计数排序-Counting Sort,归并排序,堆排序,归并排序对链表进行排序,快速排序的随机化和非递归实现 ,快速排序算法及分析,0-n^2内的数排序,对接近有序的数组排序, 求第二小元素
贪心算法:任务选择问题,Kruskal最小生成树,霍夫曼编码,最小生成树Prim算法 , Dijkstra最短路径算法, Dijkstra算法-邻接表-最小堆实现
动态规划:重叠子问题的性质,最优子结构的性质,最长递增子序列,最长公共子序列,最小编辑距离(Edit Distance),最小花费路径,硬币找零,矩阵连乘,二项式系数,01背包问题,扔鸡蛋问题(Egg Dropping Puzzle) ,划分问题,最长回文子序列,数字转字母的编码方式的个数, 最长公共子串, Bellman-Ford最短路径算法
数学相关:扩展欧几里得算法,整数集合中找出3的最大倍数 , 阶乘末尾0的个数,幸运数字,卡特兰(Catalan)数,巴比伦算法求平方根,整数集合中找出3的最大倍数,质因数分解及算法实现,康托展开式, 约瑟夫环的数学优化方法, 整数中1出现的次数
位运算:能被3整除的数,Single Number I,Single Number II,判断两个数是否符号相反,位运算做除法,寻找缺失的数字,不用加减乘除做加法
图论:BFS和DFS ,最大流问题-Ford-Fulkerson算法,判断强连通图,求强连通分量-Kosaraju算法, 二分图判断,有向无环图的最短路径, 拓扑排序, Graham’s Scan法求解凸包问题
回溯和剪枝:骑士旅游问题,分支限界法(1),分支限界法(2),分支限界法(3) ,n皇后问题,N皇后问题2(优化) , 哈密顿回路-回溯法
分治:最接近点对问题,两个有序数组的中位数,棋盘覆盖问题
模式匹配:BF算法到KMP算法,KMP算法(1),KMP匹配算法(2)优化,有限自动机
高级数据结构
字典树(Trie树),并查集,并查集优化,后缀树简介, 后缀数组及应用, 区间树 , 区间最值查询-线段树, B树(一)概述和C++实现, B树(二)插入操作的实现, 线段树入门-求给定区间的和 ,
高级算法
遗传算法-入门,旅行商(TSP)问题-遗传算法, 模拟退火算法-TSP问题,概率算法求解π
算法分析
渐进分析,循环的时间复杂度,递归的时间复杂度, 快速排序算法及分析 , NP完全性理论与近似算法