Trie (字典樹)
"A", "to", "tea", "ted", "ten", "i", "in", "inn" 這些單詞組成的字典樹.
Radix Tree (基數樹)
基數樹與字典樹的區別在於基數樹將單詞壓縮了, 節點變得更少
Suffix Tree (后綴樹)
單詞 "BANANA" 的后綴樹
. 每個后綴以 $ 結尾
. 所有的后綴為 A$
, NA$
, ANA$
,NANA$
, ANANA$
and BANANA$
. 葉子節點表示后綴的起始坐標. 世界上后綴樹就是一個單詞的所有后綴組成的字典樹, 並且把字典樹單詞進行了壓縮
實際應用
在我們的消息隊列中, 需要根據消息的 subject 查找所有訂閱了該 subject 的 group, consumer 訂閱 subject 方式是通過訂閱 subject 的前綴, 例如 subject 為 flight.book.pay 可以通過訂閱前綴 flight.book 來接收消息. 在我們的應用中, 使用 concurrent-tree 的 ConcurrentInvertedRadixTree 來存儲 prefix => Map<String, Group>. 也就是 前綴 => Map<Group name, Group>.
在查詢的時候, 通過 tree.getKeysPrefixing(subject) 來查找訂閱了 subject 的 group