当前位置: 代码迷 >> 综合 >> TRIE(2)
  详细解决方案

TRIE(2)

热度:76   发布时间:2023-10-31 01:47:16.0

实现TRIE结构

?第一种方法是用一个二维数组来存储:

int trie[MAX_NODE][CHARSET];
int k;

?其中MAX_NODE是trie中最大能存储的节点数目,CHARSET是字符集的大小,k是当前trie中包含有多少个节点。Trie[i][j]的值是0表示trie树中i号节点,并没有一条连出去的边,满足边上的字符标识是字符集中第j个字符(从0开始);trie[i][j]的值是正整数x表示trie树中i号节点,有一条连出去的边,满足边上的字符标识是字符集中第j个字符,并且这条边的终点是x号节点

?举个例子,下图中左边是trie树,右边是二维数组trie中非0的值

image

?用二维数组实现trie的好处是用起来非常方便,因为trie的insert和search操作都要经常判断一个节点有没有标识某个字符的边,以及边的终点是几号节点。用二维数组的话,我们只要看相应的trie[i][j]的值即可。用二维数组的缺点是可能会浪费很多空间,因为我们对每一个节点都用了一个字符集大小的数组存储子节点号,但实际上每个点连出去的边很稀疏。比如上图中实际上每个点只有0-2个子节点,但是我们给每个节点都开辟了一个大小是26的数组去存储子节点