カメヲラボ

主にプログラミングとお勉強全般について書いてます

大規模データセットのためのアルゴリズムとデータ構造

大規模データセットのためのアルゴリズムとデータ構造という書籍

とても良い本が出ます

『大規模データセットのためのアルゴリズムとデータ構造』という本が7月26日発売に発売されます。原書はAlgorithms and Data Structures for Massive Datasetsというタイトルです。

この本を見たときに「これは良い!!🤩」と思って、2023年の11月頃からかなり時間をかけて日本語版を作りました。良い本に仕上がったと思いますので、発売前に本書の魅力をお伝えしたいと思います。

概要

本書では、大きく3つの分野「確率的データ構造」・「ストリーミングデータ処理」・「外部記憶アルゴリズム」について、概念 ⇒ 理論 ⇒ 実践がわかりやすく説明されています。また、全体的なイメージを掴んだり、逆に細部を具体的に理解するために、どの章にも豊富な図表がちりばめられています。大規模データセットを効率的に扱うためのアルゴリズムとデータ構造に関する専門知識を解説した書籍ではありますが、この分野の専門家でなくてもよく理解できるように細かな工夫がなされています。

構成

第1部:確率的で簡潔なデータ構造

このパートでは、大規模データを効率的に保存・処理するための省スペースデータ構造を紹介しています。具体的には、ハッシュテーブルやブルームフィルター、カウントミンスケッチ(Count-Min Sketch)、ハイパーログログ(HyperLogLog)といったデータ構造がどのように機能し、どのように適用されるかを解説しています。

第2部:ストリーミングデータ構造とアルゴリズム

このパートでは、リアルタイムで流れるデータ(ストリーミングデータ)を効率的に処理するためのアルゴリズムとデータ構造について説明しています。ストリーミングデータの統合方法やサンプリング技術、近似分位数の計算方法などを取り上げ、現実世界での応用例も紹介しています。

第3部:外部記憶データ構造とアルゴリズム

このパートでは、ディスクや外部記憶を活用して大規模データを効率的に処理する方法を解説しています。外部記憶モデルの基本概念から始め、データベースで使用される B^\epsilon木や LSM木などのデータ構造、さらに外部メモリーを使ったソートアルゴリズムについて具体例を交えて説明しています。

具体的なコードは少な目

最近の書籍は付属のコードがWebページで閲覧できるようになっています。本書でもそのようになっていますので、本文ではコード自体が少な目になっています。特に重要な部分をピックアップしたものや疑似コードのみの掲載にとどめ、かなりコンパクトにまとまっていて何ページにもわたってコードが張り付けられているというようなことはありません(基本的に1ページに収まる程度のサイズになっています)。

参考文献がしっかり書いてある

「当たり前でしょ!」と思う方も多いかもしれませんが、そうとも限らないんですよ。個人的にはこれが一番気に入っていてアルゴリズムとかデータ構造、レビューなどの文献がきちんと示されていて、特に電子書籍版は使い勝手が非常に良いです。

数式は最低限

いくらか数式が出てきますが、わからない人は読み飛ばしてもあまり困らないと思います。もっと詳しく知りたいという方は、多くの箇所で参考文献が示されていますので、参照がしやすくなっています。全体的に、数式・コード・文章・図表のバランスが良く、読んでいてしんどくなりにくい作りになっています。

図がモリモリ

本書では、説明のための図表がフルカラーで100箇所以上で使われています。 イラストもバリエーションに富み、データ構造やアルゴリズム概念を表す抽象的なものからアルゴリズム詳細を表す具体的なものまで、さまざまです。ここで何点か紹介しておきます。

これらはほんの一部ですが、本書の雰囲気は何となくつかんでいただけるかと思います。

翻訳版特有の情報

内容的な修正

数式や図表、その説明など、誤植や内容的な間違いはかなり修正できていると思います。

カタカナ表記

本書では、人名や専門用語について原書の表記を用いている箇所とカタカナ表記を用いている箇所がありますが、主に2つの理由があります。

検索のしやすさ

専門用語や人名について、より詳しく調べてみたいということがあると思います。その際、カタカナ表記で検索しても問題なく情報が得られる場合はカタカナ表記にしていて、そうでない場合は原書の表記のままにしています。たとえば、「カウントミンスケッチ」をWeb検索すると、「Count-Min Sketch」に関する情報が得られますが、「tダイジェスト」をWeb検索しても「t-digest」に関する情報がほとんど得られず関係のない情報をたくさん拾ってしまいます。人名についても基本的には同じ理由ですが、どちらかというと次の理由が大きいです。

読む際のリズム

本書は日本語で書かれたものですので、文章中に英単語が出現し過ぎて読み進める際に流れが一瞬止まってしまうことをできるだけ避けようとしています。実際に声に出して読む読者はあまりいないと思いますが、基本的には音読して引っかかりが少ない文章を意識しました。音以外にも、文章の見た目で引っかからないように表記を注意しました。たとえば、「ブルームフィルタ―、カウントミンスケッチ、HyperLogLog」と3つの用語を並べた場合、HyperLogLogの部分が浮いてしまうため、「ブルームフィルタ―、カウントミンスケッチ、ハイパーログログ」のように表記しています。

表現について

日本語訳版では、比喩的・示唆的な表現は極力シンプルで直接的な表現に変えています。これによりオリジナルの作者が持つ情緒的なニュアンスが変化する可能性がありますが、内容のわかりやすさを重視しました。

訳注について

ここで述べた説明は本文中に直接反映していますが、本文の流れが途切れるような長い説明が必要になった場合は訳注として記述しています。

音引きについて

これは最後までかなり悩んだのですが、語尾の長音符号を極力省略せずに表記しました。私自身が音引きを省略(プログラマ、サーバ等)に慣れきっているので、校正時にだいぶ違和感がありました。しかし世の中の音引きルールが徐々に長音符号を省略しない方向へ進んでいるような気がしたので、そのようにしました。読んでいて気持ち悪いを感じる方がいらっしゃったらスミマセン。

いきなりでごめんなさい(誤植情報)

実は見本誌が出来上がった時点でミスを見つけてしまいました。 本書の図2.2で、スペルチェックに単語をハッシュ化するという例のイラストがあり、初版では

と表示されると思いますが、実際に修正したかったのは、図を として、さらにキャプションを『スペルチェックとハッシュ化』から『スペルチェックとハッシュ化(「あなた」を「あたな」とタイプミスしている)』という感じです。

「あなた」という単語を誤って「あたな」としてしまった結果、スペルチェッカーが反応したというイラストなのですが、最終チェック段階で伝達ミスによってちゃんとしたスペルに修正されてしまいました😅

正誤表等の情報は『大規模データセットのためのアルゴリズムとデータ構造』サポートサイト | マイナビブックス

にまとめられると思いますので、上記のリンクも合わせてご確認ください🙇