アルゴリズム
アルゴリズムは、コンピューターに「どう考えて動けばよいか」を教える手順です。
Code Recipe では、身近なたとえ、図解、コピペで試せるコードをセットにして学びます。
この章のコード例は、すべて Python で統一しています。まずはPythonで考え方をつかみ、慣れてきたら他の言語にも応用してみましょう。
ソートアルゴリズム
データを順番に並べ替えるアルゴリズムです。プログラミングでは、この並び替えを「ソート」と呼びます。
- バブルソート: 背比べで順番をそろえよう
- 選択ソート: いちばん小さいカードを選び続けよう
- 挿入ソート: 手札をそろえるように並べよう
- クイックソート: 最強の並び替えを攻略せよ
- マージソート: 小分けにしてから合体しよう
- ヒープソート: 山のルールで最大値を取り出そう
データ構造
データをどう置くか、どう取り出すかを決める道具です。アルゴリズムを速く、書きやすくする土台になります。
- スタック: 最後に入れたものから取り出そう
- キュー: 先に並んだものから取り出そう
- 優先度付きキュー: 一番大事なものから取り出そう
- 累積和: 区間の合計を一瞬で出そう
- Union-Find: グループのつながりを管理しよう
- セグメント木: 区間の情報を高速に更新しよう
- Binary Indexed Tree: 足し算の履歴を木で持とう
- 逆ポーランド記法: 後ろに演算子を書く式を計算しよう
探索アルゴリズム
データの中から、目的の値や条件に合うものを見つけるアルゴリズムです。まずは「順番に探す」と「半分ずつしぼる」の違いをつかみましょう。
グラフ探索
点と線でつながった情報をたどるアルゴリズムです。迷路、地図、SNSのつながりのようなデータを考えるときに使います。
- 深さ優先探索法: 行けるところまで進もう
- 幅優先探索法: 近いところから広げよう
- ダイクストラ法: 目的地への最速ルートを探そう
- ベルマンフォード法: マイナスの道も考えて最短距離を探そう
- ワーシャル・フロイド法: 全地点どうしの最短距離をまとめて出そう
- 木の直径: 一番遠い地点を探そう
- トポロジカルソート: 作業の順番を決めよう
- クラスカル法: 安い道から選んで全体をつなごう
- プリム法: 今つながっている場所から木を広げよう
数学アルゴリズム
数の性質を利用して、計算を効率よく進めるアルゴリズムです。素数や約数など、数学とプログラミングがつながる単元です。
- 素数攻略ガイド: 数字の正体を見破ろう
- エラトステネスの篩: 素数をまとめて見つけよう
- ユークリッドの互除法: 余りで最大公約数を見つけよう
- 素因数分解: 数を素数のかけ算に分解しよう
- 累乗: くり返し二乗法で高速に計算しよう
- 組み合わせ計算: 選び方の数を求めよう
文字列・データ変換
長い文字列やデータを、扱いやすい短い値に変える考え方です。検索、重複チェック、パスワード管理などの入口になります。
ゲームAI
ゲームの次の一手を考えるためのアルゴリズムです。「試して選ぶ」と「相手の手も読む」の違いを比べてみましょう。
セキュリティ
ネットで情報を安全にやり取りするための考え方です。実用には専門的な仕組みが必要ですが、まずは基本のアイデアをつかみましょう。
戦略・典型解法
少し大きな問題を、小さな問題に分けて考えるアルゴリズムです。ゲーム、最短ルート、最適な組み合わせなどにつながります。