朴素的串匹配算法:
KMP匹配算法:
2、广度优先搜索BFS
3、深度优先搜索DFS
4、狄克斯特拉算法Dijkstra
5、贪婪算法
6、动态规划
7、安全散列算法SHA
用递归分析问题,基于循环写代码。
(1)遍历(数组、链表、xml)
(2)二分查找(前提有序)
(3)hash表查找:哈希表的特点就是查找效率高,时间复杂度为常数级别 O(1), 而额外空间复杂度则要高出许多。
hash_table:hash_table这种数据结构在插入,删除,搜寻等操作上也具有常数平均时间,并且不需要依赖于数据的随机性(RB Tree、AVL Tree依赖于数据的随机性)。如果需要存储的数据相比较桶子的个数来说不是很多的情况采用线性探测或二次探测;如果负载系统比较大则采用拉链法。
(4)map容器:对内存大小比较敏感或者数据存储要求有序的话,则可以用 map 容器,map容器是用红黑树实现的,查找效率稍微低一些,复杂度为(logn)。
(5)数据库查找
选择算法时权衡三个因素: 查找速度, 数据量, 内存使用。
lmdb底层原理:mmap文件映射 ,B+树查找
有序数组可以利用二分查找法快速的查找特定的值,时间复杂度为O(log2N),但是插入数据时很慢,时间复杂度为O(N);链表的插入和删除速度都很快,时间复杂度为O(1),但是查找特定值很慢,时间复杂度为O(N)。有没有一种数据结构既能像有序数组那样快速的查找数据,又能像链表那样快速的插入数据呢?树就能满足这种要求。不过依然是以算法的复杂度为代价。一个程序当它降低了一个方面的复杂度,必然会在其他方面增加复杂度,阴阳互补。
参考连接:
https://blog.csdn.net/u012152619/article/details/42059325
所有基础数据结构和算法的纯C语言实现,如各自排序、链表、栈、队列、各种树以及应用、图算法、字符串匹配算法、回溯、并查集等
https://github.com/LeechanX/Data-Structures-and-Algorithms-in-C
七大查找算法实现:
https://www.cnblogs.com/leezx/p/5719012.html
uthash
http://troydhanson.github.io/uthash/
十大排序算法选择与对比:
https://www.cnblogs.com/panda-ling/p/6705193.html
linux内核哈希链表:https://www.cnblogs.com/wanghetao/archive/2013/04/13/3019156.html
https://blog.csdn.net/hty46565/article/details/53201824
B+树:
B树是一种平衡的多路查找树,在文件系统中主要作为文件的索引。也多用在数据库索引中。因为外存较慢,而且使用二叉树很容易造成频繁的I/O读写,现在可以引入多叉树来改变这种情况的。
https://github.com/KinderRiven/bplus_tree
http://www.srcmini.com/1348.html
https://blog.csdn.net/xiaohusaier/article/details/77101640
Bloom filter
海量数据处理
https://www.cnblogs.com/haippy/archive/2012/07/14/2590669.html
跳跃表
https://blog.csdn.net/daniel_ustc/article/details/20218489
红黑树C实现
https://www.cnblogs.com/skywang12345/p/3624177.html
手动迭代开方
海量数据排序:https://blog.csdn.net/yu487/article/details/86021711
https://blog.csdn.net/zhushuai1221/article/details/51781002
https://blog.csdn.net/FX677588/article/details/72471357
比较排序nlogn证明:https://www.zhihu.com/question/24516934
递归和回溯:https://www.cnblogs.com/brifuture/p/6553665.html
https://blog.csdn.net/yhflyl/article/details/86763197
分治:https://blog.csdn.net/qq_37763204/article/details/79519823
https://blog.csdn.net/qq_39382769/article/details/80788293
动态规划:https://www.jianshu.com/p/86daf14620b1
https://www.cnblogs.com/chihaoyuIsnotHere/p/10138087.html
https://github.com/search?l=C&q=动态规划&type=Repositories
贪婪算法:最短路径问题(广度优先、狄克斯特拉)都属于贪婪算法
https://www.jianshu.com/p/b613ae9d77ff
五大经典算法:https://github.com/jingong/Algorithm
递归算法的时间复杂度计算:https://blog.csdn.net/so_geili/article/details/53444816