エンジニアなら勉強しておきたいアルゴリズム関連本9選
19/04/07 16:08:08 19/04/07 16:23:06
プログラミングはアルゴリズムに始まりアルゴリズムに終わるとよく言われます。どういうことかと言うと、まずプログラミングを学ぶにあたって最初にアルゴリズムを学びます。
なぜなら、入力から出力までの基本的な流れがわかっていないと、いくらプログラミング言語仕様に詳しくても適正な動きをするコードにはならないからです。
イメージとしては、日本人なら日本語で処理の流れを説明できないものは、プログラミング言語でも実装できません。仮に実装したとしても、本人がよく理解しないまま動いている危険性の高いシステムです。
なので、最初にアルゴリズムを学び、プログラミング言語でどのような処理の流れを作るのかを考えます。そしてアルゴリズムを学んだら、実際に実装するためのプログラミング言語を学びます。
ここでは、アルゴリズムを学ぶにあたってオススメの書籍を9点ご紹介していきます。
目次
データ構造とアルゴリズム
参照:Amazon.co.jp
「データ構造とアルゴリズム」は、グラフ探索、最短路問題、動的計画法、縮小法、ボロノイ図とドロネー図など、データ構造とアルゴリズムの基本が万遍なく解説された書籍です。
説明もわかりやすく、完全に始めて勉強する人に向けて解説されています。ただしあえて難点を上げるとすると、実際のプログラミングとの関連性をイメージしづらいということがあるかもしれません。
結論としてはここで学んだアルゴリズムをそのままプログラミングで実装するのですが、最初のうちはいまいちピンと来ないかもしれません。プログラミングのイメージができないため多少つまらなく感じる可能性はありますが、確実に必要な知識なのでとりあえず読破することをおすすめします。
すでにある程度プログラミング経験のある方がアルゴリズムを学ぶ場合は、ソースコードと関連付けてアルゴリズムをイメージできるかと思います。
アルゴリズムとデータ構造の設計法
参照:Amazon.co.jp
「アルゴリズムとデータ構造の設計法」はC言語をベースに設計について解説している書籍です。難解というわけではありませんが、完全にアルゴリズムを始めて勉強する方は避けた方が良いでしょう。
逆にある程度基礎的なアルゴリズムを把握していて、プログラミング言語の経験もある方にはおすすめの書籍です。著者によると、C言語を半年程度勉強した学生に向けての書籍のようです。
なので、そのくらいのレベルに該当する方には良いと思います。
バンディット問題の理論とアルゴリズム
参考:Amazon.co.jp
「バンディット問題の理論とアルゴリズム」は機械学習をベースにアルゴリズムについて解説した書籍です。そのため、機械学習に興味のある方に特におすすめです。
機械学習のアルゴリズムについては度々各所で取り上げられていますが、エンジニアの中にもよく知らない方は多いでしょう。しかしこちらの書籍は比較的内容が難しいです。
機械学習についての知識がなくても理解できるレベルではありますが、アルゴリズムの基礎がわかっていないと理解不能かと思います。なので、基礎がまだの方は別の書籍で先に学んでからこちらの書籍にチャレンジした方が良いです。
アルゴリズム図鑑 絵で見てわかる26のアルゴリズム
参照:Amazon.co.jp
「アルゴリズム図鑑 絵で見てわかる26のアルゴリズム」はアルゴリズムを完全に始めて勉強する人や、他の書籍で挫折した人におすすめです。基本のアルゴリズムをイラスト付きで解説しているため、直感的に理解しやすいはずです。
ただしこの一冊でプログラミングに重要なアルゴリズムを網羅的に学べるわけではありません。あくまで入口の初歩的な部分を理解しやすくした書籍と考えると良いでしょう。
実践で役に立たないわけではありませんが、これよりは応用しないと実践的なコードにはなりません。なので初心者でもイラストなしの書籍で理解できそうならそちらの方が良いですし、経験者ならなおさら別の書籍を選択することをおすすめします。
アルゴリズムが難しそうで混乱しそう、すでによくわからなくて混乱している、といった方が頭の中で基本を整理するためには良い書籍です。
アルゴリズムを、はじめよう
参照:Amazon.co.jp
「アルゴリズムを、はじめよう」も上で紹介した「アルゴリズム図鑑 絵で見てわかる26のアルゴリズム」同様、初歩的な内容になっています。こちらも図でわかりやすく解説しているので、基本を学ぶならどちらか一冊で良いかと思います。
どちらが良いかについてですが、はっきり言ってしまえばどちらでも良いです。なぜかというと、「アルゴリズムを、はじめよう」と「アルゴリズム図鑑 絵で見てわかる26のアルゴリズム」の役割はあくまでもアルゴリズムに慣れ親しんで、ステップアップしやすくするための書籍だからです。
つまり、書籍の内容だけでアルゴリズムの勉強が完結するわけではなく、とっかかりに過ぎません。アルゴリズムの概要が理解できてなおかつ抵抗感を持たなければそれでOKだからこそ、どちらでも良いということです。
物凄く勉強になるということではなく、まずはアルゴリズムに慣れ、その後の勉強で抵抗感を持たなくすることが重要です。
世界でもっとも強力な9のアルゴリズム
参照:Amazon.co.jp
「世界でもっとも強力な9のアルゴリズム」初心者でも楽しみながらアルゴリズムの勉強ができる一冊です。プログラミングの知識がまったくなくても理解できるようになっています。
ただし上で紹介した「アルゴリズムを、はじめよう」と「アルゴリズム図鑑 絵で見てわかる26のアルゴリズム」よりは少し理解が難しいかもしれません。少しだけアルゴリズムについて知っているか、まったく知らなくてももともと考えるのが好きな人には合っている書籍です。
逆にすでにアルゴリズムの基本は把握していて、プログラミングもばりばりにやっている人には物足りないでしょう。
アルゴリズム思考術:問題解決の最強ツール
参考:Amazon.co.jp
「アルゴリズム思考術:問題解決の最強ツール」はプログラミングに必要なアルゴリズムだけを効率的に学びたい方にとってはやや遠回りな書籍です。というのも、仕事や日常生活をアルゴリズムを用いることで効率化、最適化していこうというコンセプトの書籍だからです。
具体的には、ベンチャービジネスを売却するタイミングはいつか、車をどの駐車スペースに停めるべきか、何人めの交際相手で手を打って結婚すべきか、といったことをアルゴリズムを用いてひも解いています。
内容的にかなり遊びの要素が強いように思われるかもしれませんが、意外とアルゴリズムについても専門的に解説されています。アルゴリズムと人間を無理やり結び付けたようなものではなく、きちんと納得させられるようなロジックになっています。
楽しみながらアルゴリズムを学びたい、どうせアルゴリズムを学ぶならプログラミングだけでなく人生そのものに活かしたい、といった方におすすめの一冊です。
情報処理教科書 出るとこだけ! 基本情報技術者 テキスト&問題集
参考:Amazon.co.jp
アルゴリズム単体で勉強しても良いのですが、基本情報技術者試験にアルゴリズム問題が含まれています。アルゴリズムとプログラミングをトレースする問題の両方が出題されるので、アルゴリズムの基礎を学びたいなら基本情報技術者試験の勉強をするのもおすすめです。
勉強して合格すれば資格も取得できるので、一石二鳥でしょう。「情報処理教科書 出るとこだけ! 基本情報技術者 テキスト&問題集」はテキストと問題集が一緒になった書籍です。
基本情報技術者試験の勉強法は人それぞれですが、個人的には問題集と解説を見ながら先に考えてみて、わからない部分をテキストで補足するスタイルが効率的かと思います。
そのため、テキストのみの分厚い書籍などはあまり必要ないでしょう。特にアルゴリズムについてはテキストで覚えるよりも問題と解説を見て考えてみた方が力が付きます。
暗記問題を徹底して合格する戦略もありますが、アルゴリズムの勉強も兼ねるのであれば暗記問題は最低限勉強しておいて、配点の高いアルゴリズム問題を考えて解く練習をしておくと良いかと思います。
頭の体操になり、実践的なプログラミングでもある程度役立つはずです。
情報処理教科書 応用情報技術者 テキスト&問題集
参照:Amazon.co.jp
基本情報技術者試験を飛ばして応用情報技術者試験を受けるのもありです。実際それで合格している人も多いです。
基本情報に比べて応用情報は問題が選択式になっているのですが、アルゴリズム問題を選択する前提で重点的に勉強すれば、基本情報技術者試験よりも深く理解できます。
まとめ
以上、アルゴリズムの関連書籍を紹介してきました。自分のレベルにあった書籍を選ぶことが重要ですが、仮に自分のレベルとずれた書籍を選んでしまっても無駄ではありません。
易しすぎる場合でも流し読みしていけば知らない内容が出てきたり、読むことでより基礎が固まるはずです。また難しすぎる場合は、いったん簡単な書籍を再度購入して読んでみて、そこからまた元の書籍に戻ることもできます。
どれか一冊で勉強しなければならないわけではないので、レベルに応じて何冊か読んでみるのがおすすめです。
効率的なアルゴリズムの学び方
プログラミング言語に関してはどの言語を選んでもアルゴリズムに従って記述していくだけなので、アルゴリズムができていればあとは表面的にコーディングしていくだけです。
具体的な記述法やなどはその都度調べれば良いです。そしてプログラミングに慣れてきたら、より一層アルゴリズムで考える傾向が強くなります。プログラミングを始めた頃はソースコードを追いかけるのに必死で、土台となるアルゴリズムが崩れてしまったり、コードを書いているうちに混乱して効率的でないシステムになってしまったりします。
慣れないうちはコード一つ一つが手さぐり状態なので、土台となるアルゴリズムのことを途中で忘れてしまうのも無理はありません。しかしプログラミングに慣れて自然にすらすらコードを書けるようになると、また土台となるアルゴリズムの重要性に気付きます。
アルゴリズムを意識しながら、効率的な形で表面的なコーディングができるようになるのです。
最後にまとめると、以下のようになります。
まずは基本のアルゴリズムを学ぶ
→アルゴリズムをベースにプログラミングを行うが、プログラミングに慣れていないのでアルゴリズムのことを忘れる
→プログラミングに慣れて自然に書けるようになり、改めてアルゴリズムの重要性に気付く
人気記事