免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7565 | 回复: 8
打印 上一主题 下一主题

hash和trie树比较 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-27 14:44 |只看该作者 |倒序浏览
刚接触trie树,请达人说说他们各自的优缺点和什么时候用最好?

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
2 [报告]
发表于 2010-08-27 14:50 |只看该作者
都可以对付字符串的处理。

论坛徽章:
0
3 [报告]
发表于 2010-08-27 15:02 |只看该作者
对于hash来说,字符串的hash求值复杂度基本上是和字符长长度相关的,因为你需要遍历一次你要求hash值的字符串,这点上Trie与其是相同的,树的深度和字符串的长度相同,因此单从检索效率来说,我个人的观点是两者差不多
但是从应用范围来说,hash会更广一点,因为与其说hash是一种数据结构,倒不如说它是一种方法,一种映射的方法,除了字符串,hash对于数值等的表现也非常好,而Trie基本上多数用在字符串上
从空间使用来说,个人观点是hash占优,因为虽然Trie的主要空间损耗还是在数据部分,但是每个节点的子节点未占满的情况下是需要保留指针域的,未出现的分支就置空,可是却占据了一个指针域,而相比之下,hash就没有这个顾虑,基本上附加损耗是常数的,我们以拉链的方式来看,本身除了链的头需要一个指针域之外,其余的都是对于一个新节点才会产生一个新的next指针,额外的消耗不会超过整个hash的模数(也就是求出hash值之后取余那个数)
但是hash如此的优秀却有它的一个不确定因素,也就是hash函数的选取,选好了你的查找效率就非常的高,选得不好可能比直接一个个比较还烂,而相比起来Trie则较为稳定,不管怎么样查找的比较次数总是一个串的长度,这是其优势
总的说个人会倾向于使用hash,但是根据不同场合我可能会选Trie,比如空间充足而且时间要求严格或者是找不到很好的hash函数的情况下
但是不管如何,多知道一点总是好多的

论坛徽章:
0
4 [报告]
发表于 2010-08-27 15:27 |只看该作者
回复 3# daybreakcx


    辛苦了,daybreakcx,谢谢

论坛徽章:
0
5 [报告]
发表于 2010-08-27 15:42 |只看该作者
谈一下个人的理解吧,把要查找的数据比作字典里的字的话,可以把trie比作音序查字法,而hash则是部首查字法或四角查字法。

    于是,相对于trie来说,hash更灵活,选用不同的hash方法,效率和hash冲突的概率也不同(同一个部首的字也许有很多);
    而trie树主要问题是树的层高,如果要索引的字的拼音很长很变态,我们也要建一个很高很变态的树么?所以如果能固定层高,或是能将相同的特征抽取出来,岂不更好,于是有了radix树。

从查找效率来说,两者差不多;例证就是linux内核中路由表的组织是基于hash的,而free bsd中内核中路由表的组织是基于radix树的。

至于具体选择哪个,个人认为看具体情况了。

论坛徽章:
0
6 [报告]
发表于 2010-08-27 16:18 |只看该作者
回复 5# zboom


    字典比喻很形象啊!radix树没听过,孤陋寡闻啊。。

论坛徽章:
0
7 [报告]
发表于 2010-08-27 16:28 |只看该作者
A radix trie/tree, Patricia trie/tree, or crit bit trie/tree is a specialized set data structure based on the trie that is used to store a set of strings.
详细内容见:http://en.wikipedia.org/wiki/Radix_tree

论坛徽章:
0
8 [报告]
发表于 2010-08-27 16:45 |只看该作者
实际上Radix Tree是在Trie的基础之上将树中的链状部分集合起来,这样来降低树的高度

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
9 [报告]
发表于 2010-08-27 17:20 |只看该作者
内核中就有Radix Tree
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP