Open Data Structures の日本語ソースコード
Clone or download
spinute Merge pull request #58 from amutake/fix-typo-binomial
Fix typo: bonimial -> binomial
Latest commit d82f0c9 Oct 31, 2018

README.md

Open Data Structures 日本語訳プロジェクト

Open Data Structuresというプロジェクトをご存知だろうか。 これはPat Morin氏が立ち上げたプロジェクトで、 大学のコンピュータサイエンス系の学部ならほぼ皆が最初に学ぶデータ構造に関する教科書をフリーで公開するものである。

PDFファイルはプロジェクトのウェブサイトhttps://sites.google.com/view/open-data-structures-ja/homeにて随時更新しながら配布している。(なお、現在翻訳は一通り終わっているものの、査読・校正・校閲の途中である。)

この本の読み方 (翻訳者まえがき)

本書の想定読者は初学者からベテランのエンジニアまで、データ構造に関わる全ての人である。 翻訳者が読者に伝えたいことは次の3つである。

1. 存在するソフトウェアのほとんどはシンプルなデータ構造の組み合わせでできている

本書で紹介するデータ構造はシンプルなものである。よくある誤解は、これらのデータ構造は理論上のものであり、実際の複雑なソフトウェアはもっと複雑なデータ構造を使っているというものだ。これは全くの間違いである。OSやブラウザなどの複雑なソフトウェアもその実シンプルなデータ構造の組み合わせでできている。本書で紹介するデータ構造が理解できれば多くのソフトウェアの骨子が理解できるようになるだろう。言い換えれば、本書が紹介するのはただの数理モデルではなく実務に役に立つ理論である。

2. 本書の内容がだいたい分かるようになれば良いエンジニアになれる

ほとんどのソフトウェアが基本的なデータ構造の組み合わせで出来ているということは、基本的なデータ構造が理解できその使い方を覚えれば多くのソフトウェアをデザインし、あるいは既存のソフトウェアの改良が出来るようになるということである。

3. 分からない部分は飛ばしても良い

本書には数学の理解を必要とする解析がある。もし理解できない部分があったらその部分は読み飛ばしても差し支えない。あるいは詳しい知り合いや翻訳者、著者に質問するべきである。理解できないことがあるならばそれは読み手が原因ではなく書き手が問題だと考えるべきである。いずれにせよ、分からない箇所があったらそこで立ち止まるのではなく、そのまま先に進めるところまで進んでみることを勧めたい。

2.に関連して、本書で扱われているデータ構造のうち、実用上極めて重要であり息をするように取り出せるようにしておくべき項目と、そうではない項目とを、明確に区別しておくことが有益であると考えた。 以下に列挙する項目は、本書の中でも特に重要だと訳者3人ともが判断したものだ。 学術研究やプログラマーの実務で頻繁に登場する内容なので、すべての学習者が深く理解しておくことが望ましいだろう。

第2章: ArrayStack、ArrayQueue、ArrayDeque
第3章: SLList、DLList
第5章: ChainedHashTable
第6章: BinaryTree、BinarySearchTree
第9章: RedBlackTree(9.2.2節から9.2.4節は複雑なので読み飛ばしてよい)
第10章: BinaryHeap
第11章: MergeSort、QuickSort
第12章: 幅優先探索、深さ優先探索

上記に列挙しなかった、ややマイナーなデータ構造にも、別の意味で学ぶ価値はある。 マイナーゆえに直接役立つ機会は少ないかもしれないが、その背後にあるアイデアやその解析手法は多くの場面で役立つはずだ(単純に知的な面白さのある話題も多い)。 どの章を重点的に読むか、興味に応じて適宜調整してほしい。

なぜ翻訳をするのか

本書はOpen Data Structuresを邦訳したものである。 まず、本を英語から日本語に翻訳する意味はあるのだろうか?

個人的には英語よりも日本語を読む方がかなり早い。 しかし、専門書を読むときはついつい翻訳は避けてしまう。 品質のばらつきが大きく、読みにくいものも多いと感じるのが自分の場合は主な原因だ。

しかし、この教科書は入門書である。 前提知識は中学高校レベルの数学をほんの少しだけである(簡単なプログラミング経験があった方が、実感が持てて、有り難みがわかり、楽しく読めるとは思うが)。 日本語で読める無料の教科書は、分野の裾野を広げ、楽しくプログラムを書ける・効率的なプログラムが書ける人を増やしてくれるだろう。

母国語で大学レベルの教科書が読める国は多くない。 より専門的な内容はもっぱら英語で読むことになるのだから、さっさと崖から突き落とせという意見ももちろんあるだろう。 自分自身も大学に入った頃は「英語で読む」のに抵抗があった(「英語を読む」ところまでは幸い受験で慣れた)。 この抵抗を可及的速やかに取り除くのが、アクセス可能な知識を押し拡げるためには極めて重要だろう。 大学生になっても日本語で教科書が読める恵まれた環境が、日本人の英語アレルギーを支えている可能性はある。

しかし、この教科書は専門への橋渡しの、その初っ端に位置している。 この教科書の前提とする知識は多くない。これに英語を加えるのは、対象読者を制限することになるだろう。 母国語でこのような入門書が読める、少なくともその選択肢があるのは望ましいことだと思う。

この教科書は、300ページ程度ながら、丁寧にゆっくりと、それでいて実用的な題材を納めている。 より本格的な教科書も出版されており、その中には翻訳されているものもある。 内容は素晴らしく、僕自身今でも度々読み返す。 少なくとも自分の持っている二冊は翻訳の質も良かった(Algorithm DesignIntroduction to Algorithms)。 ただし、文量は大判1000ページ程度、価格は10000円程度と、気軽なものではない。 こういった専門家向けの入門書や、あるいはより専門的な書籍への橋渡しであるこの教科書を、日本語で・フリーでアクセスできるようにするのがこの翻訳の目的である。

堀江 慧(@spinute)

ライセンス・著作権

原著(および翻訳書)のライセンスはCC-BY 2.5(https://creativecommons.org/licenses/by/2.5/) です。 また翻訳・クラウドファンディングについては事前に原著者にメールで連絡し、許可を頂いています。