Trie Tree匹配演算法實現

2021-08-09 05:12:16 字數 1001 閱讀 2590

問題描述:給定乙個字串集合s=,設計並實現乙個演算法,在給定文字中找出這些字串的不連續出現(不連續出現,例如「abdcdshfkajhg」這個文字中就包含了「abc」)。

一些多模式匹配演算法如:ac演算法,wm演算法等,都是去尋找給定的文字中是否包含目標字串,例如在乙個網頁中尋找多個敏感詞。然而,尋找的敏感詞必須在文字中是完整連續的。例如其中乙個目標字串為「abbc」,那麼「acbbc」是無法檢測到的。為了去尋找乙個非連續的目標字串,可以採用trie樹,也叫做字首樹來實現。

首先利用字串集合s構建乙個trie樹。

集合currentnodes記錄了待匹配的所有節點,初始值為trietree的根節點的子節點。然後對於讀取到的每乙個字元判斷是否在currentnodes集合中。如果不在則繼續判斷下乙個。如果在,判斷是否是結束字元。如果不是結束字元,則將該節點從currentnodes移除,將它的子節點加入。如果是結束字元,則將該字元對應的字串新增到結果中。

input1: trietree

input2: targetfile

set currentnodes = new set(trietree);

int max_gap=30;

while(targetfile.readchar.next!= null){

for node in currentnodes:

if targetfile.readchar.character == node.character && targetfile.readchar.order-node.order < max_gap:

if node.isend:

find a discontinuous string string;

else:

currentnodes.remove(node);

currentnodes.addall(node.childlist);

output: result.

字典樹 TrieTree 講解與實現

字典樹,又稱單詞查詢樹,trie樹 是一種 樹形結構 是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來節約 儲存空間 最大限度地減少無謂的字串比較,查詢效率比 雜湊表高。字典樹與字典很相似,當你要查...

實現括號匹配演算法

括號匹配問題 假設乙個算術表示式中包含圓括號 方括號和花括號三種型別的括號,編寫乙個函式,用來判別表示式中的括號是否正確配對,並設計乙個測試主函式。演算法思想 在算術表示式中,右括號和左括號匹配的次序正好符合後到的括號要最先被匹配的 後進先出 堆疊操作特點,因此可以借助乙個堆疊來進行判斷。括號匹配共...

URL路徑匹配演算法實現

自定義的filter裡沒有excludepath,所以自己寫了乙個。開始寫的時候還把注意力放在路徑分隔符 上,後來發現完全沒必要。站在更抽象的層次上看無非都是字串而已。測試資料 匹配模式 如下 public static boolean matching string reg,string inpu...