标签:目的 包含 统计 时间 哈希树 前缀树 结果 其它 算法
什么是TireTree?
Tire树,是一种非常重要的数据结构,又称字典树,查找单词树或者前缀树(Prefix Tree),是一种用于快速检索的多叉树结构,同时,它也是很多算法和复杂数据结构的基础,如后缀树,AC自动机等。
字典树(Tire)可以保存一些字符串->值的对应关系。基本上,跟Java的HashMap功能相同,都是key-value的映射,只不过Tire的key只能是字符串。是一种哈希树的变种。
Tire树可以利用字符串的公共前缀来节约存储空间。
如下图构建的Tire树用10个节点保存5个单词,and,as,at,cn,com:
从上面的图中,我们可以发现Tire树的一些特性:
TireTree的优缺点
,利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。
Tire树强大之处就是在于它的时间复杂度,插入和查询的效率都是O(n),n是待插入、查询的字符串的长度,而与Tire中保存了多少个元素无关。
关于查询,可能会说Hash表时间复杂度是O(1)不是更快?但是Hash搜索的效率通常取决于Hash函数的好坏,若一个坏的Hash函数导致很多的冲突,效率并不一定比Tire结高。而Tire树中不同的关键字就不会产生冲突,它只有在允许一个关键字关联多个值的情况下才有类似Hash碰撞。此外,Tire树不用求hash值,对短字符串有更快的速度,因为求hash值也是需要遍历字符串的。
当hash函数很好时,Tire树的查找效率会低于Hash搜索。
另外,Tire树的核心思想是空间换时间,所以它的空间消耗较大。
TireTree的基本实现
Tire树的插入、删除、查找都不是很难,用一个一重循环即可,即第i次循环找到前i个字母所对应的子树,然后进行相应的操作。
TireTree的作用是什么?
Tire树是一种非常简单高效的数据结构,在字符串匹配等领域有广泛的应用。
事先把已知的一些字符串(字典)的有关信息保存到Tire树里,查找另外一些未知字符串是否出现过或者出现频率。
Tire树利用多个字符串的公共前缀来节省存储空间,反之,当我们把大量字符串存储到一棵Tire树上时,我们可以快速得到某些字符串的公共前缀。
Tire树是一棵多叉树,只要先遍历整棵树,输出相应的字符串便是按字典排序的结果。
如后缀树,AC自动机等。
TireTree的复杂度
标签:目的 包含 统计 时间 哈希树 前缀树 结果 其它 算法
原文地址:https://www.cnblogs.com/johnnyzhao/p/12849748.html