實現前綴樹

  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

相關文章
相關標籤/搜索