Edit this page | Report an issue |
日本語で説明する場合も、ステップごとに分けた方が読みやすい。
二分探索木 $T$ に要素 $p$ を挿入する手順
二分探索木 $T$ から要素 $p$ を削除する手順
参考:ブログ
今回の問題で登場した文字列の出現検知手法をTrie木という。
Trie木は、文字列の効率的な検索(retrieval)のために使われるデータ構造。現在の位置から始まる文字列が、それ以前にも出現しているかを True
or False
で検知する。
アルファバットの種類の総数を $m=26$ とおき、文字列の先頭から $i$ 番目の文字から始まる連続した4文字を a[i:i+4]
と表すことにする。
文字列を前から走査していき、どのアルファベットでもない空の文字 $\epsilon$ を根とする $m$ 分木を以下の手順で構成していく。
i=1
とする。a[i:i+4]
の文字に対応する位置にノードを挿入する。True
を出力する。False
を出力する。i=i+1
としてこの作業を文字列の終わりまで繰り返すと、各文字列 a[i:i+4]
の部分文字列がそれ以前に出現しているかを調べることができる。。B-tree(B木)は、データを格納するための木構造の1種であり、$O(\log n)$ の計算量3で目的のデータに辿り着くことができる。
B木の最大の特徴は、各ノードに複数のデータを格納できることであり、データの挿入や削除をする際に操作を工夫することで、木構造が以下の条件を常に満たすようにしている。
B-tree を関係データベースに特化させた木構造を B+ 木と呼ぶ。B+ 木では、B-tree の葉のみにデータを格納し、2段目以上の部分を索引(インデックス)として利用する。
値の検索・挿入・削除の方法は通常の B-tree と同様であるが、B+ 木では葉のノード間にもポインタが用意されている。これにより、関係データベースで多用される 値の範囲検索 を高速化することができる。ただし、データを葉ノードに格納するため、挿入コストは大きくなる。
また、B-tree をファイルシステムに応用した B*木がある。
“B-tree” の名前の由来は、考案者の1人Bayer の頭文字, 考案した時の関係会社 Boeing の頭文字, または Balanced の頭文字等、諸説のうち第1説が有 力だが,本人の釈明もないので、本文では単に B-tree と呼ぶことにする
(Googleより)
(1)〜(4):各8点
(5)〜(6):各9点
(50点満点)
コメントはGithubレポジトリにIssueとして投稿されます。