- 一些数据结构和算法的实现,数据结构部分主要参考严蔚敏的《数据结构》,后面主要参考网上的一些讲解。
- 实现这些算法的时间跨度比较大,编码风格未必一致,实现的质量也参差不齐,开始用gcc编译,转Mac后用clang编译。
- 代码内均有详细的注释,请参考代码内部的讲解或参考链接进行学习。
##字符串搜索 ###1.暴力搜索和KMP的实现 KMP.cpp
- 一般字符串搜索算法时间复杂度O(m*n) m,n分别为原串和子串的长度
- KMP 时间复杂度 为 O(m+n),其利用待查询串的回文特性,构造一个Next数组,跳过那些有回文特性的不必要查询的字符。
###2.BM算法 Boyer-Moore.cpp: Boyer-Moore搜索算法
- bm算法时间复杂度为
n/m
,极坏情况下位n*m
,广泛用于grep,IDE文件内容查找。- 其构造一个坏字符表和一个好后缀表,用查询串从后往前搜索,并择优跳过不必搜索的字符。
##内部排序 InternalSort.cpp 包含下列所有内部排序方法以及时间测试对比
###1.复杂度 O(N*(logN))
- QuickSort 快速排序
- HeapSort 堆排序
- MergeSort 归并排序
- ShellSort 希尔排序 O(N*(logN))
###2.复杂度 O(n^2)
- BubbingSort 冒泡排序 O(n^2)
- SimpleSelectSort 简单选择排序 O(n^2)
- InsertSort 插入排序O(n^2)
- BInsertSort 折半插入排序O(n^2)
###3.复杂度-其他
- RadixSort 基数排序O(nlog(r)m)
- BucketSort 桶排序O(N)~O(n^2)
##普通容器
###1.动态数组 TArray.h,利用c++模板类实现了一个动态数组,添加stdarg.h以便支持可变的函数参数。
可以了解系统和编译器是怎么处理多维数组问题,并加强对多维数组的理解。
###2.链表
- C++模板类实现
TList.h 链表C++模版类实现
TListTest.cpp 测试文件
- C 实现
List.h 线性表链式表示(c语言)
ListTest.c 测试文件
###3.队列
CQueue.h 队列的基本操作(c实现)
CQueueTest.c 测试文件
###4.栈
TStack.h 栈模版类实现
TStackTest.cpp 测试文件
###5.元组 Tuple.cpp 利用c++0x的可变模版参数和模版元编程实现一个简单的tuple
##树形容器
###1.二叉树
TBiTree.h,二叉树的模版类实现
包括前中后递归非递归遍历,层次遍历,层次遍历求深度
###2.前缀树 Trie.cpp,实现并测试前缀串查找
###3.二叉排序树
BsTree.c纯C语言实现
BSTree.cppC++模版类实现
###4.红黑树 RBTree.cpp,红黑树的C++模版类实现
##图论 TGraph.h、TGragh.cpp图论数据结构和相关算法
##压缩算法 ###1.Huffman Huffman.cpp,实现Huffman编码,采用系统STL库,实现对文件的编码和解码,有两个txt的测试文件
##AI算法
###1.A*算法以及跳步算法的实现
AStar.cpp 跳步算法是对普通A星算法的改进
ps:文件开始有一个是否启用跳步算法进行优化A星算法的开关
##其他
LRU.cpp LRU近期最少使用数据缓存算法,完全用标准STL实现
###一致性Hash算法 ConsistentHashMap.cpp 一般用作在分布式集群中,服务器的动态添加删除,以及请求的分配