本書は、計算機でプログラムを作成する際に必要なデータ構造の一種である、「簡潔データ構造」についての教科書です。簡潔データ構造は、データを圧縮したまま検索等の処理ができるようなデータ構造であり、大量のデータを効率良く処理する際に有益なものです。従来の圧縮手法では、データを圧縮したまま扱うことができません。データを使用する際にはまず復元する必要があり、圧縮前と同じ量の計算機のメモリが必要になってしまいます。一方、簡潔データ構造では必要な部分のみを復元することで、圧縮したままの処理が可能になっています。また、データが大量の場合、高速に検索するための「索引」と呼ばれるデータ構造を付加することがありますが、通常のデータ構造ではそのサイズが大きく、元のデータよりも大きくなることがあるため、索引の圧縮も必要となります。簡潔データ構造ではこの索引の圧縮もできます。
本書では、代表的な簡潔データ構造について、その構造と理論的な結果について説明しています。同じ機能を持つデータ構造については、最初に提案されたものではなく、後に提案された、より洗練されていて理解しやすいものを紹介するようにしています。その際、定理の厳密な証明も入れています。プログラムを書くだけならば証明は理解しなくても良いのですが、その場合は既に存在するライブラリを使うだけになり、自分の行いたい操作がサポートされていない場合には処理を行えません。その場合は自分で新しいデータ構造を作る必要がありますが、そのためには定理の証明を理解することが必要となります。興味を持たれた方はぜひ自分で新しい簡潔データ構造を開発してみてください。
簡潔データ構造の歴史としては、まず1989年にビットベクトルおよび木構造やグラフ構造が提案され、その後2000年に文字列検索のデータ構造が提案されてからは多くの研究が行われています。特に、8章のBW変換と4章のウェーブレット木は、それぞれ2000年、2003年に提案されたものですが、これらは最も重要な簡潔データ構造と言ってもよく、広く使われています。特に、DNA配列の検索では簡潔データ構造を利用したものが主流となっています。本書では、まず3章で最も基本的なビットベクトルの簡潔データ構造を説明し、次にそれを用いた様々な簡潔データ構造を説明します。データ構造間の依存関係も分かるように書いてあります。本書により、簡潔データ構造を俯瞰的にとらえることができると思います。
(紹介文執筆者: 情報理工学系研究科 教授 定兼 邦彦 / 2021)
本の目次
1.1 背景
1.2 簡潔データ構造の歴史
1.3 本書の構成
第2章 基本事項
2.1 計算モデル
2.2 標準的な記号と関数
2.3 情報理論的下限
2.4 簡潔データ構造
2.5 エントロピー
2.6 整数の符号化
2.7 整数列の符号化
第3章 基本的な簡潔データ構造
3.1 ビットベクトルの簡潔データ構造
3.2 パタンに対するrank/select
3.3 疎なベクトルの簡潔データ構造
3.4 非常に疎なベクトルの簡潔データ構造
3.5 下限
3.6 実装上の工夫
3.7 文献ノート
第4章 ウェーブレット木
4.1 文字列でのrank/select
4.2 アルファベットサイズが大きいとき
4.3 その他の演算
4.4 ハフマン型ウェーブレット木
4.5 多分岐ウェーブレット木
4.6 直接アドレス可能符号
4.7 直交領域探索
4.8 文献ノート
第5章 区間最小値問い合わせ
5.1 問題の定義
5.2 RMQをLCAに帰着
5.3 LCAをRMQに帰着
5.4 ±1 RMQ問題
5.5 RMQ問題の定数時間アルゴリズム
5.6 RMQ問題の4nビットデータ構造
5.7 RMQ問題の2nビットデータ構造
5.8 サイズの下限
5.9 文献ノート
第6章 順序木
6.1 順序木の基本操作
6.2 LOUDS表現
6.3 括弧列(BP)表現
6.4 DFUDS表現
6.5 BP表現のより簡単なデータ構造
6.6 動的な簡潔順序木
6.7 文献ノート
第7章 文字列検索のデータ構造
7.1 文字列検索の基本問題
7.2 接尾辞配列
7.3 接尾辞木
7.4 圧縮接尾辞配列
7.5 圧縮接尾辞木
7.6 文書集合に対するデータ構造
7.7 文献ノート
第8章 BW変換
8.1 ブロックソート圧縮法
8.2 逆BW変換とLF関数
8.3 FM-index
8.4 圧縮接尾辞配列とFM-indexの関係
8.5 双方向BW変換
8.6 ラベル付き木の圧縮
8.7 de Bruijnグラフの圧縮
8.8 文献ノート
関連情報
第28回 2019年度 大川出版賞 受賞 (公益財団法人 大川情報通信基金 2019年)
http://www.okawa-foundation.or.jp/activities/publications_prize/list.html
講演:
[招待講演] 簡潔データ構造の理論と実践 (広島大学 2016年12月21日)
https://www.ieice.org/ken/paper/20161222xbn9/