Burst trie(爆炸式字典树)解读
burst trie(爆炸式字典樹)
Burst trie組成介紹
burst trie有三個不同的組成部分,一組records,一組containers,還有一個access trie。
- records包含一個字符串,必要信息(統計數據或單詞位置等),一個指針(指向實體數據的指針)
 - containers是一個records的集合,對于一個深度為K的容器,所有字符串的長度至少為k,并且所有字符串的前k個字符都是相同的。
 - access trie是containers中的葉子。
 
Burst trie例子
看不懂上面的解析,沒關系,看下面的圖,下面的圖中存儲這這10個單詞,分別是:“came”, “car”,“cat”, “cave”, “cy”, “cyan”, “we”, “went”, “were”, “west”。
該圖中存儲“came”的位置可以說是一個records,record除了代表字符串,還包含一些該單詞的必要信息,以及一個指向實體數據位置的指針。
圖中畫出的burst trie中最左邊的container包含了4個records,分別是“came”, “car”,“cat”, “cave”,明顯它們都有一個共同的前綴"ca",所以該contain的深度為2 ,并且里面record代表的字符串長度不能少于2.
圖中三角形框住的是container的葉子節點,也稱為access trie。其中,圖中的access trie數據結構是BST,所以這個Burst trie是一個基于BST的代表容器。
Burst trie查找
Burst trie查找主要分兩大步驟,前綴的查找,和后綴的匹配。
前綴查找,從根節點開始,進行字符的匹配,分兩小步:
- 從槽中找到當前字符,并且當前字符有進入下一個槽的指針,走下一步,否則匹配失敗。遇到access trie,則改為進行后綴匹配(使用BST)
 - i++
 
假設查找“came”單詞的record,搜先查找當前需要匹配字符“C”,在槽中找到"C",發現“C”的位置有進入下一個槽的指針,那么就i++,并進入下一槽。然后匹配字符"A",發現槽中“A”處的下一個指針是access trie,則對剩下的字符串進行后綴匹配(直接使用BST)
Burst trie的生長方式
Burst trie有兩種生長方式:
一種是元素的插入,元素的插入會建立新的葉子節點,或者往葉子節中添加新的后綴。
一種是以Burst trie爆破的方式進行生長,Burst trie爆破指的是用深度k的容器替換為一個trie節點和深度k+1的一組新Container的過程。
Burst trie插入
Burst trie插入的過程跟查找相識,前綴的插入和后綴插入。跟查找相似,先進行前綴的匹配添加。
前綴的添加,先槽中找到當前字符,查看當前字符是否有進入下一個槽的指針,沒有則進行新葉子(access trie)的建立,有則往下一個槽移動。如果移動到葉子節點,則直接將后綴加入葉子節點(access trie)。
Burst trie爆破
Burst trie爆破指的是用深度k的容器替換為一個trie節點和深度k+1的一組新Container的過程,這些容器之間包含原始容器中的所有記錄。決定是否破壞一個Container應該取決于訪問它的頻率和每次訪問的成本如何。
假設現在往Burst trie插入一個records,這個records代表著單詞“western”,并且假設滿足爆破條件,那么改圖就會進行Container爆破調整,變成下面這副圖:
爆破過程如下:
- 先將要爆破的葉子節點(access trie)的數據拿出來
 - 然后在匹配的K層字符的槽指向一個新建立的K+1層的槽,然后通過節點添加的方式往K+1層的槽進行葉子節點的添加
 
具體開源代碼,可以參考:https://github.com/gabrieldumitrescu/BurstTrie
參考論文:Heinz S, Zobel J, Williams H E. Burst tries: a fast, efficient data structure for string keys[J]. ACM Transactions on Information Systems (TOIS), 2002, 20(2): 192-223.
論文ppt:http://www.cs.uvm.edu/~xwu/wie/CourseSlides/Schips-BurstTries.pdf
總結
以上是生活随笔為你收集整理的Burst trie(爆炸式字典树)解读的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: vue中img标签onerror事件
 - 下一篇: 在古代,以下哪种称呼与医生有关?蚂蚁庄园