实现前缀树

  1. 前缀树
  2. 代码实现
  3. 参考文章

前缀树

当在手机上使用输入法键入某些单词的字母时,手机会自动显示以首字母开头的某些高频单词,好比键入 app 时,显示以 app 开头的 app、App、apple等等。而这种单词的推荐大多数是经过前缀树实现的。以下图。python

initLinkList

在说明前缀树以前,先看如下图git

initLinkList

如图所示,字符都在边上,每一个节点有一个 pass 值 和 end 值。github

  1. pass 值表示字符串通过该节点的次数。
  2. 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

相关文章
相关标签/搜索