資料結構之字典樹,字首樹 Trie

2021-09-20 21:47:04 字數 1419 閱讀 3798

public class trie 

public node() }

private node root; //trie樹的根結點

private int size; //樹中結點個數

public trie()

public int getsize()

}

//向字典樹中新增單詞

public void add(string str)

//將current指向當前結點的滿足條件(鍵值為ch)的孩子結點

current = current.next.get(ch);

} /*

* 更新size大小時需要考慮到字首問題

* 1. 當遍歷完傳入的單詞str時,可能並為到達樹中乙個單詞的結尾

* 如 str = "pan",trie中存的是 "panda"

* 2. 如果current執行的結點的isword為false,說明樹中還沒有存入

* pan這個單詞,此時應將n結點的isword更改為true,並更新size

* 3. size指的是樹中單詞的個數(字首單詞也是單詞:pan 和 panda是兩個單詞)

*/if(!current.isword)

}

/*		

* 判斷某一單詞是否在字典樹中

* 方法:1. 依次獲取單詞的每乙個字母,作為鍵值去對映中查詢是否有

* 與之對應的條目,若有則進行下乙個字母的比對,沒有則返回false

* 直至最後乙個字母。

* 2. 若對單詞str遍歷完成未發現不匹配的條目,則對current結點的

* isword進行判斷,若其值為true,說明這是乙個字首單詞,且已經

* 存入到當前字典樹中,返回true,反之返回false。

*/public boolean contains(string str)

return current.isword;

}

/*

* 判斷某一字串時候是單詞的字首(不要求prefix是單詞)

* 方法(大致思路和contains一致):

* 1. 依次獲取字串prefix的每乙個字母,作為鍵值去對映中查詢是否有

* 與之對應的條目,若有則進行下乙個字母的比對,沒有則返回false

* 直至最後乙個字母。

* 2. 如果迴圈比對之後為發現不匹配的條目,說明prefix是乙個字首,返回true

*/public boolean isprefix(string prefix)

return true;

}

Trie 字典樹 字首樹

所有的php檔案放到同乙個目錄下 trie charmap.php map.php stdmap.php trie.php trienode.php index.php test.php words.txt trienode.php class trienode 字典樹是利用字串的公共字首來節約儲存...

Trie 字典樹 字首樹

目錄trie是乙個多叉樹,trie專門為處理字串而設計的。使用我們之前實現的二分搜尋樹來查詢字典中的單詞,查詢的時間複雜度為o logn 如果有100萬 220 個單詞,則logn大約等於20,但是使用trie這種資料結構,查詢每個條目的時間複雜度,和一共有多少個條目無關!時間複雜度為o w w為被...

資料結構 Trie(單詞查詢樹,字典樹,字首樹)

trie,又稱字首樹或字典樹,是一種有序樹,用於儲存關聯陣列,其中的鍵通常是字串。與二叉查詢樹不同,鍵不是直接儲存在節點中,而是由節點在樹中的位置決定。乙個節點的所有子孫都有相同的字首,也就是這個節點對應的字串,而根節點對應空字串。一般情況下,不是所有的節點都有對應的值,只有葉子節點和部分內部節點所...