以前,做過乙個翻譯的程式,處理的只是英文本元,當時做的,構造了乙個26叉樹(26個英文本母,每乙個字母對應乙個樹結果),當時也不知道這對應的資料結構術語是什麼? 後來乙個巧合的機會知道了trie樹資料結構,發現我以前做的那個26叉樹不就是乙個trie樹嗎?其實對英文本元來說,構造乙個26叉樹也行,占用的空間也不是很大。但是針對漢語詞典(6763個常用漢字),這個就有問題了,需要乙個好的對trie樹的實現方式。這樣,雙陣列trie樹就隨之產生了,這個實現方式,構造兩個陣列,base, check陣列。base陣列的每個元素對應乙個trie樹的節點,他的值作為狀態轉移的基值,check陣列記錄校驗值,檢驗狀態的存在性。漢字的編碼如gb2312編碼,採用區位碼,兩個位元組。漢字的偏移序列碼可以採用這個漢字在gb2312編碼表中漢字的序列號。
整個演算法過程,分兩步:(1)構造base,check陣列;(2)搜尋。
具體情況可以參考中科院張華平的《雙陣列trie樹演算法優化及其應用研究》,裡面關於base,check陣列構造說的很清楚,這個得好好看看,那個搜尋環節很簡單。我的乙個疑惑:演算法裡面沒有提及好的解決衝突方法,演算法的言下之意就是經過優化後,衝突似乎可以避免了? 這個不切實際吧! 當資料量很少的時候,他這個演算法的確能做到,但是一旦資料量很大的話,他如何保證,當前節點的所有子節點都能在base中找到空位置? 即使能找到,設定這個當前節點的base值也得花很長時間。
個人覺得,還個演算法還是有不足的地方,需要完善,比如衝突如何解決?
雙陣列trie樹
雙陣列trie double arraytrie 是trie樹的乙個簡單而有效的實現,由兩個整數陣列構成,乙個是base,另乙個是check。設陣列下標為i,如果base i check i 均為0,表示該位置為空。如果base i 為負值,表示該狀態為詞語。check i 表示該狀態的前一狀態,t...
雙陣列trie樹
原文 trie樹的陣列實現原理 trie retrieval tree 又稱字首樹,可以用來儲存多個字串,並且非常便於查詢。在trie中查詢乙個字串的時間只取決於組成該串的字元數,與樹的節點數無關。因此,它的查詢速度通常比二叉搜尋樹更快。trie的結構很簡單,每條邊表示乙個字元,從根節點到葉節點就可...
雙陣列TRIE樹原理
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!原貼 雙陣列trie樹原理 摘要 本文介紹了一種新的內部 內部排序的內部,也就是在記憶體裡 陣列結構的digital search演算法,叫做雙陣列,結合了陣列訪問的快速和鏈式儲存的壓縮。digital search樹的每一條弧在雙陣列中都可以以o...