ISBN 9784798163239
Pythonではじめるアルゴリズム入門 伝統的なアルゴリズムで学ぶ定石と計算量
概要
Python で 25 種のアルゴリズムを実装し、計算量まで体系的に理解する
想定読者
Python でプログラミングを学んでいるが、アルゴリズムの選び方や計算量の考え方に自信がない初学者。基本情報技術者試験の対策としてPythonを使って学習したい人にも向く。
こんな人には向いていない
- 競技プログラミングや上級アルゴリズムの深掘りを求める中〜上級者には扱う範囲が基礎寄りすぎる
- Python の文法すら未経験の段階ではなく、変数・制御構造・関数の概念を一度でも触れたことがある前提で書かれているため、完全な非プログラマーには第1章だけでは追いつきにくい
- グラフ理論や動的計画法など競技プログラミング頻出テーマの網羅を期待する読者には題材の選定が異なる
読了後にできるようになること
- 線形探索・二分探索・幅優先・深さ優先探索など代表的な探索アルゴリズムを Python コードで実装できる
- 選択・挿入・バブル・ヒープ・マージ・クイックソートを計算量の観点から比較し、用途に応じて選択できる
- ベルマン・フォード法・ダイクストラ法・A* による最短経路問題を解く手順を説明できる
- O(n) / O(n log n) / O(n^2) など計算量の記法を理解し、アルゴリズム選択の判断軸として使える
- フローチャートを用いてアルゴリズムの動作イメージを可視化しながら実装に落とし込む習慣が身につく
- Boyer-Moore 法・逆ポーランド記法・ユークリッドの互除法など実務で現れる古典的アルゴリズムの仕組みを説明できる
本書のキー概念(章解説)
- 第 1 章 Pythonの基本とデータ構造を知る — Python 未経験ではない前提で書かれているが、リスト・辞書・スタック・キューのおさらいとして入門者の地ならしに機能する
- 第 2 章 基本的なプログラムを作ってみる — FizzBuzz・フィボナッチ数列・ハノイの塔などで再帰とループの使い分けを体感できる
- 第 3 章 計算量について学ぶ — O 記法の読み方と実際のコードへの当てはめが理解できる。本書全体の評価軸になる重要章
- 第 4 章 いろいろな探索方法を学ぶ — 線形探索・二分探索・幅優先・深さ優先を横断比較できる。Qiita 上でも迷路探索実装の参照元として繰り返し引用されている
- 第 5 章 データの並べ替えにかかる時間を比べる — 6種のソートアルゴリズムを計算量とともに比較。実装量が多いが各手法の違いが明確になる
- 第 6 章 実務に役立つアルゴリズムを知る — 最短経路問題(ダイクストラ・A*)・文字列探索・逆ポーランド記法など応用色が強い章。第3〜5章完了後に読むと吸収が早い
ハイライト
- 本書では、プログラミング入門者が最低限知っておきたいアルゴリズムの基礎と考え方に加えて、アルゴリズムの定石とその計算量について、具体的なサンプルコードと動作イメージを交えて丁寧に解説していきます。(Python とアルゴリズム基礎を一冊で学べるという本書の立ち位置が端的に表れている)
- 時代が変わっても変わらないアルゴリズムから考え方を学ぼう(流行り廃りに左右されない基礎力習得という本書のコンセプトを一言で表している)
外部からの言及
- Yuya-Shimizu 氏による『Pythonで学ぶアルゴリズム』シリーズ(30本超)が本書を主要参考文献として明記しており、ダイクストラ法・迷路探索・各種ソートなど章ごとの実装例を独自に検証した記事が蓄積している。各記事のコメントでも本書のサンプルコードが動作確認の基準として使われており、入門者の手を動かす学習の起点として定着している様子が読み取れる(qiita)
- 本書 p.162 / p.267 のコードを起点に、Python の nonlocal を使った再帰関数実装の別解を考察する記事が存在する。本書のサンプルコードが読者の発展的思考を促す素材として機能していることを示しており、読みながら手を動かすユーザー層の厚さが伺える(qiita)
編集メモ
書名・著者で書誌を明記した Qiita 記事群(参照確認済み)が存在し、@Yuya-Shimizu によるアルゴリズム学習シリーズ 30 本超が参考文献としてこの書籍を継続的に挙げている。ただし likes 合計は中規模水準(確認できた上位記事で計 46+22+8+8+7+6+5+5+4+3 = 累計約 120 likes)で、essential 閾値(Qiita 言及 10 件以上 + likes 200 以上)には届く可能性があるが、全件確認外のため practical と判定。2020年発行で現役の学習書として参照され続けている
読む前に押さえておきたいこと
- Pythonの変数・条件分岐・ループ・関数を一通り書いたことがある(書法的な基礎は第1章でカバーされるが、全くの未経験だとテンポが合わない可能性がある)
- アルゴリズムの事前知識は不要。ただし基本情報技術者試験の午前問題にある計算量の概念を先に触れていると第3章の吸収が早い
学習のコツ
- 第3章(計算量)は読み飛ばしがちだが、第4〜6章の各アルゴリズムを評価する共通言語になる。第2章の後に必ず読んでから進む順序が効果的
- 第6章(実務アルゴリズム)は最難関だが、最短経路問題はダイクストラ法 → ベルマン・フォード法 → A* の順に難度が上がる。ダイクストラまで自力実装できれば後は解説を読むだけで流れが掴める
- 各アルゴリズムを読んだ後、Qiita の @Yuya-Shimizu シリーズ対応回(本書と同じ題材を独自実装)を参照すると、本書のコードとの差分から理解が深まる
- フローチャート図を見て実装を先に書き、その後サンプルコードと照合するという順序で手を動かすと、アルゴリズムの骨格が記憶に定着しやすい
出版社による内容紹介
時代が変わっても 変わらないアルゴリズムから考え方を学ぼう 本書は、初心者にも扱いやすいプログラミング言語「Python」を使用して、 アルゴリズムの基礎・考え方を学ぶ入門書です。特にPythonがはじめてという方の ために、第1章ではPythonの基本とデータ構造について解説しています。 本書では、プログラミング入門者が最低限知っておきたいアルゴリズムの 基礎と考え方に加えて、アルゴリズムの定石とその計算量について、具体的 なサンプルコードと動作イメージを交えて丁寧に解説していきます。 【こんな方におすすめ】 ・アルゴリズムをゼロから学びたい ・Pythonでプログラミングを学んでいるけれど何から手をつけていいのかわからない ・過去にアルゴリズムを学ぼうと思ったけれどPythonの資料が少なかった ・基本情報技術者試験でPythonが取り入れられるので勉強したい 【本書の特徴】 ・Pythonの基本とアルゴリズムの基礎を一冊で学べる ・具体的なサンプルコードと動作イメージ(フローチャート)を交えて解説 ・自分で書いて実行して動作を試しながら学習できる ・アルゴリズムの使い方や考え方だけでなく、アルゴリズムの計算量について の理解も深まる 【扱うアルゴリズム】 FizzBuzz|フィボナッチ数列|線形探索|二分探索|幅優先探索| 深さ優先探索|番兵|8クイーン問題|n-クイーン問題|ハノイの塔| ミニマックス法|選択ソート|挿入ソート|バブルソート|ヒープソート| マージソート|クイックソート|最短経路問題|ベルマン・フォード法| ダイクストラ法|A*アルゴリズム|文字列探索の力任せ法|Boyer-Moore法| 逆ポーランド記法|ユークリッドの互除法 【章構成】 ■第1章 Pythonの基本とデータ構造を知る ■第2章 基本的なプログラムを作ってみる ■第3章 計算量について学ぶ ■第4章 いろいろな探索方法を学ぶ ■第5章 データの並べ替えにかかる時間を比べる ■第6章 実務に役立つアルゴリズムを知る ■Appendix Pythonのインストール
この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。