Trie树----如何通过前缀查找字符串

什么是“Trie 树”?

Trie 树,也叫“字典树”。顾名思义,它是一个树形结构。它是一种专门处理字符串匹配的数据结构,用来解决在一组字符串集合中快速查找某个字符串的问题。就像我们用搜索引擎搜索内容时,输入部分信息,搜索框会提示关键词,这就是Trie树的应用。

我举个简单的例子来说明一下。我们有 6 个字符串,它们分别是:

how,hi,her,hello,wei,wa

我们希望在里面多次查找某个字符串是否存在。如果每次查找,都是拿要查找的字符串跟这 6 个字符串依次进行字符串匹配,那效率就比较低,有没有更高效的方法呢?

我们先通过构建Trie树来存储这些单词,流程如下,里面的从根节点的路径表示一个单词

Trie树----如何通过前缀查找字符串_第1张图片

Trie树----如何通过前缀查找字符串_第2张图片

Trie树----如何通过前缀查找字符串_第3张图片

当我们查找时,如输入how,系统吧字符串分割成h、o、w,从树的根节点开始,依次往下查找

用Trie树处理字符串的要求

第一,字符串中包含的字符集不能太大,如果字符集太大,那存储空间可能就会浪费很多。即便可以优化,但也要付出牺牲查询、插入效率的代价。

第二,要求字符串的前缀重合比较多(可共用某个节点),不然空间消耗会变大很多。

第三,因为通过指针串起来的数据块是不连续的,而 Trie 树中用到了指针,所以,对缓存并不友好,性能上会打个折扣。

你可能感兴趣的:(java)