Succinct なトライの実験 その 2
昨日の実験結果(2009-10-29 - やた@はてな日記)は assert() が有効な状態で計測していたため,assert() を無効にした状態で再計測しました.また,Google n-gram コーパスを用いた結果を追加してあります.
ID | コーパス | キー数 | 平均キー長(bytes) |
---|---|---|---|
jawiki | 日本語版 Wikipedia タイトル一覧 | 942,390 | 20.4 |
enwiki | 英語版 Wikipedia タイトル一覧 | 6,437,567 | 18.6 |
ja1gms | 日本語版 Google n-gram コーパスの 1-gram | 2,565,427 | 18.8 |
en1gms | 英語版 Google n-gram コーパスの 1-gram | 13,588,391 | 8.3 |
次の表は,すべてのキーを辞書順に検索するのに要した時間(秒)を示しています.
jawiki | enwiki | ja1gms | en1gms | |
---|---|---|---|---|
BasicTrie | 0.88 | 6.60 | 2.92 | 10.72 |
TernaryTrie | 0.36 | 2.36 | 1.06 | 3.16 |
DaTrie | 0.14 | 0.86 | 0.34 | 0.95 |
SuccinctTrie | 3.19 | 29.42 | 12.35 | 51.47 |
LoudsTrie | 5.77 | 43.1.0 | 16.81 | 46.39 |
LoudsPlusTrie | 4.87 | 35.68 | 13.48 | 33.00 |
次の表は,すべてのキーをランダム順に検索するのに要した時間(秒)を示しています.
jawiki | enwiki | ja1gms | en1gms | |
---|---|---|---|---|
BasicTrie | 1.34 | 11.82 | 4.44 | 21.53 |
TernaryTrie | 0.80 | 7.20 | 2.63 | 12.87 |
DaTrie | 0.64 | 5.72 | 2.18 | 8.95 |
SuccinctTrie | 5.25 | 62.27 | 21.46 | 124.62 |
LoudsTrie | 7.77 | 75.56 | 24.82 | 73.1 |
LoudsPlusTrie | 6.65 | 67.09 | 20.18 | 58.98 |
最後に,トライのサイズ(kB)を示します.
jawiki | enwiki | ja1gms | en1gms | |
---|---|---|---|---|
BasicTrie | 49,917 | 300,576 | 95,424 | 241,556 |
TernaryTrie | 79,867 | 480,921 | 152,679 | 386,490 |
DaTrie | 80,007 | 481,266 | 153,561 | 386,640 |
SuccinctTrie | 19,591 | 119,686 | 39,171 | 115,119 |
LoudsTrie | 19,591 | 119,686 | 39,171 | 115,119 |
LoudsPlusTrie | 19,591 | 119,686 | 39,171 | 115,119 |
assert() を無効にしたことにより,前回の実験結果と比べて検索時間が短縮されています.Google n-gram コーパスに対する Succinct なトライの検索時間を除けば,前回の実験結果と同様の傾向が確認できます.
Google n-gram コーパスについては,SuccinctTrie と LoudsTrie, LoudsPlusTrie の関係が一部逆転しています.とくに,英語版のコーパスを用いた場合,LoudsPlusTrie は SuccinctTrie より明らかに短時間で検索できています.
英語版 Google n-gram コーパスの特徴は,「キーが短く」,「キーが多い」ことです.そのため,前回の感想において述べた「分岐の多いトライを表現する場合には(LoudsTrie, LoudsPlusTrie の方が)有利になる」という予想が正しかったことを示す実験結果になっています.
※ 深さによって探索範囲を狭めるなどの簡単な工夫で LoudsTrie, LoudsPlusTrie の検索時間を短縮できると思いますが,未確認です.