字典樹又稱單詞查找樹,Trie樹,是一種樹形結構,是一種哈希樹的變種。典型應用是用於統計,排序和保存大量的字符串(但不只限於字符串),因此常常被搜索引擎系統用於文本詞頻統計。它的優勢是:利用字符串的公共前綴來節約存儲空間,最大限度地減小無謂的字符串比較,查詢效率比哈希表高。 java
字典樹與字典很類似,當你要查一個單詞是否是在字典樹中,首先看單詞的第一個字母是否是在字典的第一層,若是不在,說明字典樹裏沒有該單詞,若是在就在該字母的孩子節點裏找是否是有單詞的第二個字母,沒有說明沒有該單詞,有的話用一樣的方法繼續查找.字典樹不只能夠用來儲存字母,也能夠儲存數字等其它數據。node
//字典樹的java實現 public class Trie { private TrieNode root; public Trie() { root = new TrieNode(); root.wordEnd = false; } public void insert(String word) { TrieNode node = root; for (int i = 0; i < word.length(); i++) { Character c = new Character(word.charAt(i)); if (!node.childdren.containsKey(c)) { node.childdren.put(c, new TrieNode()); } node = node.childdren.get(c); } node.wordEnd = true; } public boolean search(String word) { TrieNode node = root; boolean found = true; for (int i = 0; i < word.length(); i++) { Character c = new Character(word.charAt(i)); if (!node.childdren.containsKey(c)) { return false; } node = node.childdren.get(c); } return found && node.wordEnd; } public boolean startsWith(String prefix) { TrieNode node = root; boolean found = true; for (int i = 0; i < prefix.length(); i++) { Character c = new Character(prefix.charAt(i)); if (!node.childdren.containsKey(c)) { return false; } node = node.childdren.get(c); } return found; } } public class TrieNode { Map<Character, TrieNode> childdren; boolean wordEnd; public TrieNode() { childdren = new HashMap<Character, TrieNode>(); wordEnd = false; } }