Trie
クラス · Trie
template <int alphabet_size = 96, int char_offset = ' '>
struct Trie;
概要
Trie
計算量
- 長さmの挿入は $O(m\cdot alphabet\_size)$、検索は $O(m)$
構築・破棄
| 名前 | 説明 | 計算量 |
|---|---|---|
(constructor) |
根だけを持つ空のtrieを構築する | $O(alphabet\_size)$ |
メンバ関数
| 名前 | 説明 | 計算量 |
|---|---|---|
size |
ノード数を返す | $O(1)$ |
add |
ノード node_id の子 ch をたどる。無ければ新規作成する。 | 既存遷移は $O(1)$、新規ノード作成は $O(alphabet\_size)$ |
insert |
wordを挿入し各prefixのノードIDを返す | word長を $m$ として $O(m\cdot alphabet\_size)$ |
search_id |
wordを表すノードIDを返し、存在しなければ-1を返す | $O(m)$ |
get_node |
node_idのノードを返す | $O(1)$ |
メンバ型
| 名前 | 説明 | 計算量 |
|---|---|---|
node_type |
trieノード型 | 型エイリアスで実行時計算量はない |
メンバの詳細
add
int add(int node_id, char ch);
ノード node_id の子 ch をたどる。無ければ新規作成する。
- 戻り値: 子ノードの id
- 計算量: 既存遷移は $O(1)$、新規ノード作成は $O(alphabet\_size)$
- 備考: 到達した子ノードの count を1増やす(その接頭辞を持つ文字列の本数になる)。 新規作成時は depth(根からの接頭辞長)も設定する。
関連項目
LowerTrie— 小文字アルファベット(’a’-‘z’)用の TrieUpperTrie— 大文字アルファベット(’A’-‘Z’)用の TrieMixedCaseTrie— 大文字・小文字混在(’A’-‘z’)用の Trie