前綴樹

前綴樹的結構

上圖是一棵Trie樹,表示了關鍵字集合{「a」, 「to」, 「tea」, 「ted」, 「ten」, 「i」, 「in」, 「inn」} 。從上圖能夠概括出Trie樹的基本性質:
①根節點不包含字符,除根節點外的每個子節點都包含一個字符。
②從根節點到某一個節點,路徑上通過的字符鏈接起來,爲該節點對應的字符串。
③每一個節點的全部子節點包含的字符互不相同。
④從第一字符開始有連續重複的字符只佔用一個節點,好比上面的to,和ten,中重複的單詞t只佔用了一個節點。
前綴樹的應用
一、前綴匹配
二、字符串檢索
三、詞頻統計
四、字符串排序node

下面看看怎樣使用前綴樹來實現前綴匹配的。數組

前綴匹配
瞭解了前綴樹的結構後,就能夠利用前綴樹的性質來解決現實中的問題。好比說查找一個字符串數組中是否含有前綴單詞,什麼是前綴單詞:上面的 in,就是 inn 的前綴單詞。若是有十幾萬條單詞,而且每一個單詞的長度都是5-10之內,這樣一定存在大量重複的字符,所以利用前綴樹來求解不只速度快並且空間複雜度也比較好。
①定義前綴樹結構code

class TrieNode{
private TrieNode[] links;

private boolean isEnd;

private final int R=26;

private TrieNode root;

/** Initialize your data structure here. */
public TrieNode() {
    links=new TrieNode[R];
}

public boolean isContainsKey(char ch){
    return links[ch-'a']!=null;
}
public TrieNode get(char ch){
    return links[ch-'a'];
}
public  void put(char ch,TrieNode node){
    links[ch-'a']=node;
}
public void setEnd(){
    isEnd=true;
}
public boolean isEnd(){
    return isEnd;
}
 }
相關文章
相關標籤/搜索