AVL树,红黑树,B树,B+树,Trie树都分别应用在哪些现实场景中?
2016-03-14 22:40
411 查看
AVL RBtree
B B+
Trie
AVL早期有应用在linux内核上,后来被RBtree代替了,具体是用在哪个模块上,sorry,我忘了,求知欲那么强的你,google一下就有答案了,两者都保持log(n)的插入与查询,是平衡的BST,不会出现(n2)的糟糕情况,那为什么linux内核要用RBtree替代AVL呢,我没具体了解过,但从原理上看,个人猜想是AVL需要大量的旋转来保持平衡,而RBtree的旋转调节可能会少些,这是个人的臆断,真心希望有深入理解的同仁指正,用力的拍,另外我们熟悉的STL的map容器底层是RBtree,当然指的不是unordered_map,后者是hash。
而 B B+则运用在file system database这类持续存储结构,同样能保持lon(n)的插入与查询,也需要额外的平衡调节。像mysql的数据库定义是可以指定B+ 索引还是hash索引。
trie树大都用在word的匹配,但单纯的trie内存消耗很大,建trie树也需要些时间,通常用在带词典的机械分词,jieba分词就是建立在trie上匹配的,trie有其他变体可以压缩空间,像double array trie这类比较老且经典的压缩方法,也有其他比较新的压缩方式,看论文时有看过,没自己实现过所以不断言了,其实面对多模匹配trie没有其变体aho-corasick来得理想,另外aho-corasick也是可以用巧妙的方法来进行压缩空间,这里不再展开,毕竟手机码字,同时想基数树与其也类似,在nginx上有应用,说到aho-corasick其实早期的入侵检测工具snort也有应用实现,但如今改成wu-menber了,具体记不清了,其实trie还是挺有用的,Tengine也用trie实现了了匹配模块。但要是用在大量单词的匹配上确实吃内存。
作者:Justin
链接:https://www.zhihu.com/question/30527705/answer/52843214
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
B B+
Trie
AVL早期有应用在linux内核上,后来被RBtree代替了,具体是用在哪个模块上,sorry,我忘了,求知欲那么强的你,google一下就有答案了,两者都保持log(n)的插入与查询,是平衡的BST,不会出现(n2)的糟糕情况,那为什么linux内核要用RBtree替代AVL呢,我没具体了解过,但从原理上看,个人猜想是AVL需要大量的旋转来保持平衡,而RBtree的旋转调节可能会少些,这是个人的臆断,真心希望有深入理解的同仁指正,用力的拍,另外我们熟悉的STL的map容器底层是RBtree,当然指的不是unordered_map,后者是hash。
而 B B+则运用在file system database这类持续存储结构,同样能保持lon(n)的插入与查询,也需要额外的平衡调节。像mysql的数据库定义是可以指定B+ 索引还是hash索引。
trie树大都用在word的匹配,但单纯的trie内存消耗很大,建trie树也需要些时间,通常用在带词典的机械分词,jieba分词就是建立在trie上匹配的,trie有其他变体可以压缩空间,像double array trie这类比较老且经典的压缩方法,也有其他比较新的压缩方式,看论文时有看过,没自己实现过所以不断言了,其实面对多模匹配trie没有其变体aho-corasick来得理想,另外aho-corasick也是可以用巧妙的方法来进行压缩空间,这里不再展开,毕竟手机码字,同时想基数树与其也类似,在nginx上有应用,说到aho-corasick其实早期的入侵检测工具snort也有应用实现,但如今改成wu-menber了,具体记不清了,其实trie还是挺有用的,Tengine也用trie实现了了匹配模块。但要是用在大量单词的匹配上确实吃内存。
作者:Justin
链接:https://www.zhihu.com/question/30527705/answer/52843214
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章推荐
- HDU 2674 N!Again (数论)
- java基础面试
- 算法面试
- 弹窗的组件开发(一)
- shell脚本编程(1)
- 年薪千万的华为副总裁离职工作感悟------徐家俊
- Spring进阶之路(9)-Spring AOP面向切面编程概念以及通过JDK代理生成AOP代理对象
- android studio 特性--拆分--架构(增)
- 数据解析的xcode6.3配置and使用xib自定义cell高度
- 工作随笔
- asp.net winform 界面传值
- 并发与性能调优面试
- Android笔记2016-03-14
- Handlerl自我理解,望指正
- ZOJ3866 Cylinder Candy(数学)
- tcp三次握手都没有建立, 还谈什么业务包呢?------聊聊最近的一个扯皮问题
- Django的请求流程(url)
- Qt制作应用插件
- bzoj 1791: [Ioi2008]Island 岛屿
- 同一个界面内取微信的OPENID和调用微信的分享接口