簡單實現了乙個具有crud操作能力的trie。crud操作即插入(create),讀取(read),改變(update)和刪除(delete)。
刪除是基於當前結點的count
實現的。當count
為0時代表當前結點應該被完全刪除。
trie的所有操作均為o(n)
。其中n
為所要操作的單詞的長度。
public keynotfound extends exception
}public
class
trie
void setend(boolean end)
void increasecount()
int getcount()
void decreasecount()
}private trienode root;
public
trie()
public
void
insert(string word, string data)
// if this is the end of the word, store the data in to the trie and set end.
if (i == chars.length - 1)
// move one level down
currpos = currpos.children[index];}}
public
boolean
search(string word)
if (i == chars.length - 1 && currpos.children[index].isend)
currpos = currpos.children[index];
}return
false;
}public
boolean
startswith(string prefix)
currpos = currpos.children[index];
}return
true;
}public string getdata(string key) throws keynotfound
currpos = currpos.children[index];
}if (!currpos.isend)
return currpos.data;
}public
boolean
setdata(string key, string newdata)
currpos = currpos.children[index];
}if (!currpos.isend)
currpos.data = newdata;
return
true;
}public
void
delete(string word)
char chars = word.tochararray();
trienode currpos = this.root;
for (int i = 0; i < chars.length; i++) else
// if a word is deleted but the prefix still exists, delete the data and flip isend flag.
if (i == chars.length - 1)
}currpos = tmp;}}
}
trie樹 字典樹 java實現
public class trie public void insert string word else current.count current.isend true 怎麼判斷單詞是否存在?被判斷的單詞的字母與根節點下的子節點的字母進行比較,直到匹配到兩者最後乙個字母相同,並且最後乙個節點的i...
Trie樹(字典樹)的實現
trie樹,即字典樹,又稱單詞查詢樹或鍵樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計和排序大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 最大限度地減少無謂的字串比較,查詢效率比雜湊表高。trie的核心思想是空間換時間。利用字串的公共字首來降低查詢時間的...
Trie字典樹陣列實現
include using namespace std const int n 10010 int son n 26 儲存下乙個字元的行 int count n 這個單詞單詞有多少個 int pos 當前新分配的儲存位置 char szstr n 讀取字串 void stringinsert con...