- 前缀树
- 代码实现
- 参考文章
前缀树
当在手机上使用输入法键入某些单词的字母时,手机会自动显示以首字母开头的某些高频单词,好比键入 app
时,显示以 app 开头的 app、App、apple
等等。而这种单词的推荐大多数是经过前缀树实现的。以下图。python
在说明前缀树以前,先看如下图git
如图所示,字符都在边上,每一个节点有一个 pass 值 和 end 值。github
- pass 值表示字符串通过该节点的次数。
- end 值有表示有多少个字符串是以这个节点结尾的。
开始该前缀树只有一个 root 节点,好比接下来 buy 这个字符串添加进来了。先把 buy 字符串拆成三个字符[b, u ,y]。app
- 先看 b 这个字符。判读 root 节点下面是否有 b 的边,若是没有则需把前缀树节点建立出来。同时在点上把pass值置位1,end值置位0; 若是存在b的边,则: pass++。同时判断b是否为字符串 buy 的最后一个字符,是的话则 end++。
- 再看 u 字符,判断 b 下面是否有 u 的边,若是没有须要把前缀树节点建立出来。同时在点上把pass值置位1,end值置位0; 若是 b 下面存在 u 的边,则: pass++。同时判断 u 是否为字符串 buy 的最后一个字符,是的话则 end++。
- 再看 y 字符,判断 u 下面是否有 y 的边,若是没有须要把前缀树节点建立出来。同时在点上把pass值置位1,end值置位1(表示有多少字符串是以u结尾的)。
而 trie 的基本原理,具体参考 wikiless
代码实现
前缀树实现3d
查询相关词的实现code
参考文章
implementing-a-trie-data-structure-in-python-in-less-thancdn
原文地址,感受不错,欢迎 star。谢谢。blog