在阅读算法导论的时候。我用Python写的一些算法,这些算法大部分使用list来作为底层存储数据的结构。但是python的list用的是链表实现,因此有些操作性能不高。
#算法 ##排序算法:sort文件夹下面
- 冒泡排序
 - 插入排序
 - 归并排序
 - 快速排序
 - 随机快速排序
 - 选择排序
 - 堆排序
 - 计数排序
 
##查找算法
- 二分查找算法
 - 第k小数选择算法
 - 随机第k小数选择算法
 - 计算集合中两个元素的和和一个数相等
 
##动态规划
- 使用分治法的最大子数组(应该算成分治法)
 - 使用自底向上方法实现的最大子数组
 - 使用动态规划的两种方式实现的LCS(最大公共串)(下面的算法都会使用动态规划的两种方式来实现)
 - 加权有向无环图中最短路径和最长路径
 - 背包问题
 - 最长回文子串(lps)
 
###幂乘:算法复杂度是O(lgn) ##贪心算法
- 活动选择问题
 - 带权活动选择问题(其实就是一个调度问题)
 - 分数背包问题
 
###斐波那契树
- 使用循环实现的算法o(n)
 
##数论算法
- 欧几里得算法求解最大公约数
 
##字符串匹配算法
- 朴素算法
 - Rabin-Karp算法
 - KMP算法
 
##树
- 二叉树
 - 使用左孩子右兄弟实现的多叉树
 - 二叉搜索树
 - 红黑树
 - 动态顺序统计树
 - 区间树
 - AVL树(未实现,类似于红黑树)
 - Tries(用于处理字符串)
 - B树(B树的中序遍历是由我自己实现的,没有任何资料来源)
 
##列表类
- 双向链表
 - 使用三个数组实现的链表
 - 跳跃表 (性能类似于红黑树,但是编程更加简单)
 - 栈
 
##堆类和队列
- 最大堆
 - 最大优先队列
 - 使用列表实现的队列
 - 使用最大堆实现的FIFO队列
 
##哈希表
- 使用链表解决冲突的哈希表
 - 使用二次哈希解决冲突的哈希表
 
##矩阵
- 实现strassen矩阵乘法的矩阵
 
##图
- 深度遍历,广度遍历和拓扑排序
 - 带权有向无环图的最大路径(动态规划自下而上)
 
##类库:为了保证被其他算法使用的数据结构一定是没有bug的,我用Python的内置类型实现实现了一些常用的数据结构(lib)
- Stack
 - Queue
 - Set
 
- 在学习redis源码的过程中修改各个数据结构的实现,目的是使用更加精细的规则去提高数据结构的性能
 - 添加更多注释并且格式化代码,注释中注重于设计的思考
 - 添加算法导论中其他高级的数据结构
 - 计划完成一些在线的题库,比如leecode和projecteuler