字串 字首樹 字典樹 Trie樹的實現

2021-09-26 09:23:14 字數 1204 閱讀 5661

關鍵點:

1、節點類的構建,通過乙個陣列記錄下乙個節點及路徑

2、注意path==0、end==0的含義

//字典樹、字首樹的實現

/*是一種樹形結構,優點是利用字串的公共字首來節約儲存空間

* */

class trienode

} class trie

//新增word,可重複新增

public void insert(string word)

char chs = word.tochararray();

trienode node = root;

int index = 0;//記錄下乙個節點

for(int i = 0;i < chs.length;i++)

node = node.map[index];

node.path++;

} node.end++;

} //查詢word是否在trie樹中

public boolean search(string word)

char chs = word.tochararray();

trienode node = root;

int index = 0;

for(int i = 0;i < chs.length;i++)

node = node.map[index];

} //沒有單詞通過最後乙個節點

if(node.end == 0)

return true;

} //刪除word,如果word新增過多次,僅刪除乙個

public void delete(string word)

node = node.map[index];

}node.end--;

} }

//返回以字串pre為字首的單詞數量

public int prefixnumber(string pre)

node = node.map[index];

} return node.path; }

}

字串 Trie樹(字典樹)

關於這個字串的資料結構我就不多說什麼了,不知道的可以戳這裡.trie樹在oi中應用廣泛,時間優秀,缺點就是空間占用大。下文中我們將字符集大小稱為 k,模式串長度為p trie支援o np 建樹,o p 插入,查詢,刪除。可是如果二維陣列儲存的話,就要耗費kn 的空間,基本無法承受。空間上我們可以用指...

Trie樹 字典樹(字串排序)

有時,我們會碰到對字串的排序,若採用一些經典的排序演算法,則時間複雜度一般為o n lgn 但若採用trie樹,則時間複雜度僅為o n trie樹又名字典樹,從字面意思即可理解,這種樹的結構像英文本典一樣,相鄰的單詞一般字首相同,之所以時間複雜度低,是因為其採用了以空間換取時間的策略。下圖為乙個針對...

Trie樹 字典樹 字串排序

有時,我們會碰到對字串的排序,若採用一些經典的排序演算法,則時間複雜度一般為o n lgn 但若採用trie樹,則時間複雜度僅為o n trie樹又名字典樹,從字面意思即可理解,這種樹的結構像英文本典一樣,相鄰的單詞一般字首相同,之所以時間複雜度低,是因為其採用了以空間換取時間的策略。下圖為乙個針對...