探索木
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG特に、STLで使われている赤黒木の情報が欲しいです。
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNG明日本屋に行って来ます。
で、何が載ってるんですか?
0007デフォルトの名無しさん
NGNGXTCとか書いてあるけど。ひょっとして全く関係ない?
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNGSTLのRedBlackTreeははっきり言ってヌルイけど。
0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNG二進法木?
0012デフォルトの名無しさん
NGNG0013デフォルトの名無しさん
NGNGおれはあんまり理解してないけど授業で習ったのはその他に
B木、B+木@`2-3木とかがあった。
0014奥さん、名無しです
NGNG因みにこれはBinaryTreeとは関係ないよ。
0015名無しさん@お腹いっぱい。
NGNGCマガ2000・10に赤黒木のってます?
ページを教えて下さい。
00161
NGNG中途半端にしか載ってなかった様な。P.J.プラウガーの翻訳記事です。
STLの実装だから、読みにくいです。
00181
NGNG001915
NGNGどうもです。今から見てみますね。
00201
NGNG00211
NGNG・テスト環境
Pen133mhz (32M)
Windows98
VisualC++6.0SP4
・テスト項目
10万件のランダム(同値なし)数値データ(データ長:sizeof(int))
を挿入(リストはその後整列)、全体をトラバース、破壊するまで。
※速度は5回の平均を取りました。
※各プログラムはわたしが適当に組んだものです。
(バグが残ってるかもしれません。)
※今の所、B木は葉の配列を線形になめているので、2分探索に変えればもっと効率
が良くなると思います。
00221
NGNG(速度順)
----------------------------------------------------
リスト+C標準ライブラリのqsort
速度 4450 msec
比較回数 2205642
最大メモリ占有量(データ含む) 1815113 bytes
----------------------------------------------------
B木(1ノードに配置する葉の数:4-8)
速度 4610 msec
比較回数 2005995
最大メモリ占有量(データ含む) 1934469 bytes
----------------------------------------------------
赤黒木(left@`right)
速度 5440 msec
比較回数 1665535
最大メモリ占有量(データ含む) 2615113 bytes
----------------------------------------------------
AVL木(left@`right)
速度 5490 msec
比較回数 1559946
最大メモリ占有量(データ含む) 2215113 bytes
----------------------------------------------------
00231
NGNGリストですが、単純な分これがやっぱり速いみたいです。
一度ソートしてしまえば、データの探索や追加も2分探索で行なえますし。
しかし恐らく、データが大量になるに従って、クイックソートは不利になって行くでしょう。
残念なのが、平衡木の速度が思ったより良くなかった点です。
木の入れ替え作業が思ったよりオーバーヘッドになっている様です。
もっとチューニングすれば速くなるかな?
複雑な分、扱いにくそうです。
あと、B木は意外にもメモリ消費量が少なく済む事がわかりました。
構造も単純だし、結構使いやすそうです。
数値データの比較だけしかやってないので、他のデータだとまた違った結果がでるかもしれません。
10万件じゃ足りなかったかも。
あ、交換回数計ってなかった・・・。
0024デフォルトの名無しさん
NGNG速度のトレードオフになるのでためしてみるといいよん。
AVL木はB木のバイナリバージョンってかんじかなぁ。
100万〜10億あたりでネットワーク経由のデータベースを
組んでみると qsort との違いがわかってきます。
00251
NGNG時間が無くてちゃんと測定してませんが、大体22のテストのAVL木の1559946回付近に収まっています。
速度も多少上がって、現在はリスト+qsortと同等ぐらいです。
リストにuniqも含める条件だと逆転します。
比較にコストがかかるデータなら恐らく最速でしょう。(レス22の中では(笑))
あとは危険な再帰呼出しをなんとかすれば実用になりそうです。
(B木はそれでも他の木に比べると、圧倒的に再帰呼出しは少ない(1/10以下)ですが。)
00261
NGNG独自にスタックを管理すれば良いんだけど、工数がかなりかかってしまいそう…
挿入や、探索はほぼゼロなので良いんですが。
00271
NGNG00281
NGNG00291
NGNG・10万件データのトラバースに必要だった再帰呼出し回数
B木 実測4回
赤黒木 実測19回
AVL木 実測21回
単純2分木 実測26回(最悪10万回)
■ このスレッドは過去ログ倉庫に格納されています