アルゴリズムデータ構造とアルゴリズムの学習の一環として『みんなのデータ構造』を読んだ。これまでで最も良いデータ構造の学習になった。単行本(ソフトカバー)日本語訳がWebで公開されているので気になる方は無料で読める。著者や訳者や出版社応援の意味も込めて購入すると良いと思います。ラムダノート社のサイトから買うと紙書籍と電子書籍のセットがお得。内容データ構造とアルゴリズムに関連する本はアルゴリズム寄りのものが多いが、データ構造に焦点を当て続けていることが本書の特色。p.21より大学の教科書のように、正確性を優先したハードコアな内容。アルゴリズムの内容も少しだがある。グラフ」では深さ優先探索と幅優先探索を扱う。各データ構造の応用・発展や実世界との照合も各章の末尾に添えられている。自分の読み方すでに理解しているデータ構造は一部あったが、メモを取ったり写経したりを経て通読するのに14時間ほどかかった。理解が及ばない部分や、訳者まえがきで重要性があまり高くないとされていた一部(スケープゴート木とかトライ木とか)は読んだものの完全理解する前に先へ進んだ*1。練習問題は全部やるとかなりハードなので1周目では問題を眺めつつ解法を想像するぐらいにして、2周目に復習としてやるぐらいが良いと思った。計算量の解析や定理の証明部分はけっこうハードコアで高校数学を復習しないとかなり厳しそうであった。最初は数式と向き合っていたがやりたかったデータ構造の学習から逸れそうなのでほどほどに読み飛ばすことにした。苦しんだ一方、データ構造とそれを支える数学的背景の理解のために自分が数学のどの分野を学習すればよいのかが見えてよかった。本書に掲載されているコードはすべてC++だが、他言語でのプログラミング経験者なら書籍に掲載されているコードがC++であることは問題ない。訳者の方から他言語の実装や擬似コードもあるとのご指摘いただきました。ありがとうございます!C++をメインの言語として利用していない自分にとってはむしろ、C++で書かれたアルゴリズムを慣れた言語に落とし込むことでより頭を使う写経になって良かった。本書は図とコードを豊富に載せているが、それでも挙動がピンと来ない場合はデータ構造やアルゴリズムの名前で検索したり、以下のサイトでアニメーションを見て視覚的に理解することに努めた。yutaka-watanobe.github.iovisualgo.netまた、同時期に視聴していたCourseraのアルゴリズム講座で同種のデータ構造*2に出くわしたり、Courseraの課題を解く際に本書を参照したり、相互に補完しあって理解を深めることができた。同講座に関する感想は以下の記事にまとめた。ohbarye.hatenablog.jp印象に残ったところ印象に残ったところの感想を少しだけおさらい。連結リスト」さすがにStackとかQueueとか理解しているだろと思って読み始めたところ、自分が理解しているのは抽象・インタフェースとしてのデータ構造とその使い方であって、内部実装まではイメージできていなかったことがわかって序盤から引き込まれた。同じインタフェースでも内部実装を変えることで処理時間やメモリ効率が変わるのは当たり前のことなのだがそのプリミティブな実装を複数並べて比較することができて面白い。ハッシュテーブル」スキップリスト、ハッシュテーブル、Treap、クイックソート等々...ランダム性を扱うデータ構造やアルゴリズムのかっこ良さが心で理解できた。木が多すぎてもはや森。赤黒木の代償として実装が複雑という話が出てきており、これはSedgewick先生がCourseraの講座でも言っていたことを思い出した。Treeの発表以前、とあるデータベースプロバイダが赤黒木の削除の実装を誤ったために障害を起こしたという話。valid,invalidで学んだ内容とリンクしており、知識の点が線になった感覚があってよかった。業務にて行き当たりばったりでデータ構造を学んできた身からすると、このように正確性を重視しつつ体系立てて基礎を学べる一冊があるのはありがたい。この本で扱うのはシンプルなもののみだが、実世界のソフトウェアの骨子はシンプルなデータ構造の組み合わせでできているから、本書の内容を理解することは良いソフトウェアエンジニアになるために有用だ(本書の訳者まえがきより)...という主張もグッときた。自分同様にデータ構造の基礎を学習したい人には無条件でおすすめする。5はてなブログをはじめよう!ohbaryeさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。