Trie 数结构

 

        Trie,又称单词查找树键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。

        它有3个基本性质:
        1.根节点不包含字符,除根节点外每一个节点都只包含一个字符。
        2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。
        3.每个节点的所有子节点包含的字符都不相同。       

        这是一个Trie结构的例子:

        

 

         在这个Trie结构中,保存了A、to、tea、ted、ten、i、in、inn这8个字符串,仅占用8个字节(不包括指针占用的空间)。

         所有含有公共前缀的字符串将挂在树中同一个结点下。实际上trie简明的存储了存在于串集合中的所有公共前缀

         标准Trie树的查找:

         对于英文单词的查找,我们完全可以在内部结点中建立26个元素组成的指针数组。如果要查找a,只需要在内部节点的指针数组中找第0个指针即可(b=1个指针,随机定位)。时间复杂度为O(1)

          效率:

         对于有n个英文字母的串来说,在内部结点中定位指针所需要花费O(d)时间,d为字母表的大小,英文为26。由于在上面的算法中内部结点指针定位使用了数组随机存储方式,因此时间复杂度降为了O(1)。但是如果是中文字,下面在实际应用中会提到。因此我们在这里还是用O(d)查找成功的时候恰好走了一条从根结点到叶子结点的路径。因此时间复杂度为O(d*n)但是,当查找集合X中所有字符串两两都不共享前缀时,trie中出现最坏情况。除根之外,所有内部结点都自由一个子结点。此时的查找时间复杂度蜕化为O(d*(n^2))

        

 

 

 

你可能感兴趣的:(算法,搜索引擎,存储)