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

作者: pengjianbokobe 发布时间: 2010-08-27
于是,相对于trie来说,hash更灵活,选用不同的hash方法,效率和hash冲突的概率也不同(同一个部首的字也许有很多);
而trie树主要问题是树的层高,如果要索引的字的拼音很长很变态,我们也要建一个很高很变态的树么?所以如果能固定层高,或是能将相同的特征抽取出来,岂不更好,于是有了radix树。
从查找效率来说,两者差不多;例证就是linux内核中路由表的组织是基于hash的,而free bsd中内核中路由表的组织是基于radix树的。
至于具体选择哪个,个人认为看具体情况了。
作者: zboom 发布时间: 2010-08-27
字典比喻很形象啊!radix树没听过,孤陋寡闻啊。。

作者: pengjianbokobe 发布时间: 2010-08-27
详细内容见:http://en.wikipedia.org/wiki/Radix_tree
作者: zboom 发布时间: 2010-08-27
作者: daybreakcx 发布时间: 2010-08-27
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28