- 前綴樹
- 代碼實現
- 參考文章
前綴樹
當在手機上使用輸入法鍵入某些單詞的字母時,手機會自動顯示以首字母開頭的某些高頻單詞,好比鍵入 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