読後レビュー|『問題解決力を鍛える!アルゴリズムとデータ構造』

こんにちは、Nash です。

この記事は 「問題解決力を鍛える!アルゴリズムとデータ構造」の書評 についての記事です。

では見ていきましょう。

この本はどんな本?

本書では、現実世界の問題を解決するための「 実践的なアルゴリズム設計技法の鍛錬 」を目指している本です。

本書の詳細な紹介は、筆者のけんちょんさんがブログにてかなり細かく行われてますので、こちらをどうぞ。

また、電子書籍版の初版を読みました。

この本は誰が書いたの?

著者は「大槻 兼資」さんこと「けんちょん」さんです。株式会社 NTT データ数理システム所属で、Qiita やブログなどで大量かつ超高いクオリティのアルゴリズムに関する記事を投稿し続けていることで有名です。この度、それらの記事を元に書籍化された流れです。

監修は「秋葉 拓哉」さんで、株式会社 Preferred Networks 執行役員として活動しており、『プログラミングコンテストチャレンジブック 第 2 版』の著者でもあります。

そのため、この本はアルゴリズム界隈の重鎮たちによって手がけられてます。

「IT エンジニア本大賞 2021 特別賞」

また、この本は翔泳社にて行われている毎年恒例の IT エンジニア本大賞にて見事、 IT エンジニア本大賞 2021 の特別賞 となった本です。

ちなみにこの年は、他の 3 冊の特別賞のうち 2 冊は大賞もダブル受賞していて、それに並んで本書は特別賞を取っています。

この本から得られること

自分が実際に読んで得られたことです。

  • 実践的なアルゴリズムの考え方と書き方
  • プログラミングコンテスト頻出問題の解き方

この本はだれが読むべき?

個人的にこの本は下記のような人にをおすすめできます。

  • プログラミングコンテストで中級者へステップアップしたい人

先に読んでおくと良い本

この本は入門者へ向けられた本なのですが、いかんせん取り扱ってる内容が難しい上に厳格的な本なので、それなりに適性がある人間でないと難しいかと思います。

個人的には先に下記の本を読んでおくほうがよりスムーズに理解が進むかと思いますし、もし逆に下記の本を読んでも詰まるレベルだとすれば、この本はまだ早いかもしれないです。

  • なっとくアルゴリズム
  • 世界で闘うプログラミング力を鍛える本(「より高度な話題」以降は含めず)

だれが読んだの

この本を読んだ私の簡単な自己紹介です。

大学では情報学科だったのですが、まったく真面目に勉強してこなかったので、職業プログラマーになって数年立ってから、プライベートで時間を作ってデータ構造とアルゴリズムの勉強しなおしました。

この本はそのときに読んだ本です。

ただ、この本は 2 度ほど挫折していて、挫折したときに「なっとくアルゴリズム」と「世界で戦う本」などを読んでどうにか知識をつけてからまた戻ってきて、3 度目の正直でなんとか理解しきって読み終わった状態です。


では、自分が読んだ結果の評論を書いていきます。

書評

洗練されたアルゴリズム

全体を通してこの本で 紹介されているアルゴリズムは実践的であることが主眼におかれていることもあり洗練されている ように感じました。

「アルゴリズムを書く」と一口に言っても様々な書き方があります。この本では、わかりやすくて簡単かつ計算量に難がないものを選ばれている印象です。

例えば、自分が他の機会で学んだダイクストラ法ですが、この本で説明されているアルゴリズムのほうがより洗練されていました。実際に、この本での説明・解説の中でどうしてこのアルゴリズムを紹介していて他よりも洗練されているかについても言及されています。

すでにこの本で解説されている内容を知っていたとしても、より洗練された書き方を知れるよい機会でした。

そもそも取り扱っている内容が難しい

そもそも取り扱っている内容が初学者向けにしてはやや難しいと個人的に思いました。とはいえ、これは私の地頭の問題かとも思いますが・・・。

この本では、動的計画法、最小全域木、UnionFind、ネットワークフローなどの説明がされています。特に割と序盤から中盤では動的計画法が説明されていますがが、その中の1つの問題の「編集距離」は LeetCode だと Hard に属する問題だったりします。

「この本は入門から中級」みたいに書かれていることをちょくちょく見るけど、そもそもこの本を手にとるような人たちはかなりポテンシャルが高い人しかいないと思っていて、そんなクラスタでの「入門から中級」は、適性がそこまでない普通の人である私からすると結構シンドいし普通に難しいと思って何度も挫折してます。

何度も挫折しながらもどうにか読み終えた感想としては、どんだけわかりやすい解説をしてくれていても、そもそも取り扱っている内容がそれなりに難しいので、どうしたって学習はシンドイよ、ということです。

もちろん、全体的に丁寧に説明をしてくれてはいるが、そもそも「それなりに難しいことを勉強してる」ということを頭の片隅に持って、もしわからなくてもそれを思い出してゆっくり読み進めるのがいいかと思います。

文章による説明の限界

文章でどのように事象が進むのかを説明している箇所が何箇所かありますが、文章で理解するのがややシンドイです。

いくらわかりやすい説明とはいえ、そもそも文章による説明にも限界があるとすごい感じました。これは本というメディアの限界です。

「どういう風にモノゴトか進むのか?」のような説明に文章は適してないと思っています。わかりやすい説明といえば下記のようなものが一般的な考えかと思います。

  • 箇条書きにする(文章の読み解く負荷を減らす)

  • 図表を使う

  • 動画を使う

特に、今の時代だと豊富な動画があるので、それらを見たほうが正直わかりやすいケースも多いです。

とはいえ、この本で順序立てて説明されていくので、学習の道筋はこの本の通り進めてわからない箇所は他の動画などで理解を深めていったほうがわかりやすいかと思いました。

学術的な説明口調

この本を読んでいて感じた点ですが、学術的な文言などを使っている説明されていることが多い印象です。

例えば、日常生活では絶対使わないような「X の値は高々 Y までである」みたいな表現とかです。

そのため、読みやすさという点では個人的にはややとっつきづらさがあった点は否めないです。ですが、このような表現は厳格な説明をしているということの裏返しだとも思っています。

慣れの問題もあるので普段はブログなどを中心に柔らかい文章を読みすぎていることもあるので、こういう学術的な本を読む良い機会だったかと思いました。

コーディングインタビュー対策としてはオーバーエンジニアリング

この本の位置付けはあくまでプログラミングコンテストに向けたものであり、コーディングインタビュー対策としては問題が難しすぎるので、あまり適していないかもしれないです。

コーディングインタビュー向けの本におけるグローバルスタンダードな本である「世界で戦う本」にて「ここの内容は難しいのでコーディングインタビューではあまり出ないけど、一応勉強したい人は勉強してね」というスタンスで書かれている「より高度な話題」のパートがあり、例えばダイクストラ法などを解説してます。

だが、けんちょん本では、ダイクストラ法などがメインのパートで書かれてたりします。

この本はプログラミングコンテスト向けの本で、コーディングインタビュー対策であったり、よりステップを踏んでアルゴリズムを学習したいなら、違う本を使って学習曲線をよりなめらかにして学習を進めたほうが良いかと思います。

ほかの本と比較

入門者向けの本として書かれていますが、個人的には入門者はより簡単なレベルの本から初めたほうが良いかと思います。

具体的には下記の本です。

  • なっとくアルゴリズム
  • 世界で闘うプログラミング力を鍛える本(「より高度な話題」以降は含めず)

それぞれの本について、書評を書いてあるのでそれらをどうぞ。

おわりに

入門本ということで読み始めましたが実際は何度か挫折していて、他の本や動画などをいろいろ読んで最終的にどうにか最後まで読み切れました。

書かれている内容自体は個人的にかなり有意義だったと感じていることもあり、読んでよかった本だったと思っています。

この本から得られること

  • 実践的なアルゴリズムの考え方と書き方
  • プログラミングコンテスト頻出問題の解き方

この本はだれが読むべき?

  • プログラミングコンテストで中級者へステップアップしたい人