双数组trie树

搜索树包括B_树、B+树、Trie树等以及它们的各种变形。用Trie树搜索一个关键码的时间与关键码本身及其长度有关,最快是O(1),即在第一层即可判断是否搜索到,最坏的情况是O(n),n为Trie树的层数。

Trie树的缺点是占内存,因为Trie树的大多数结点分支很少。为了减少空间浪费,可以用两个数组来表示Trie树,也就是双数组Trie树。

一、构建:

《双数组trie树》

首先对词表中所有出现的10个汉字进行编码:啊-1,阿-2,唉-3,根-4,胶-5,拉-6,及-7,廷-8,伯-9,人-10。。对于每一个汉字,需要确定一个base值,使得对于所有以该汉字开头的词,在双数组中都能放下。例如,现在要确定“阿”字的base值,假设以“阿”开头的词的第二个字序列码依次为a1,a2,a3……an,我们必须找到一个值i,使得base[i+a1],check[i+a1],base[i+a2],check[i+a2]……base[i+an],check[i+an]均为0。一旦找到了这个i,“阿”的base值就确定为i。用这种方法构建双数组Trie(Double-ArrayTrie),经过四次遍历,将所有的词语放入双数组中,然后还要遍历一遍词表,修改base值。因为我们用负的base值表示该位置为词语。如果状态i对应某一个词,而且Base=0,那么令Base=(-1)*i,如果Base的值不是0,那么令Base=(-1)*Base。

《双数组trie树》

《双数组trie树》

二、查询:

《双数组trie树》

参考:

https://wenku.baidu.com/view/2f1c8b18ed630b1c58eeb528.html

https://wenku.baidu.com/view/fcf1c56a561252d380eb6e1d.html

https://wenku.baidu.com/view/71e82437f111f18583d05a54.html?rec_flag=default&mark_pay_doc=2&mark_rec_page=1&mark_rec_position=5&mark_rec=view_r_1&clear_uda_param=1

    原文作者:Trie树
    原文地址: https://blog.csdn.net/sinat_34080511/article/details/79712057
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞