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