在阅读算法导论的时候。我用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