メインコンテンツへスキップ
レッスン 13 / 15推定時間: 25

問題を解く魔法:アルゴリズムって何?

最短ルートを探す、効率的に片付ける...日常の工夫も実はアルゴリズム!より良い方法を考える力を身につけて、問題解決のプロになりましょう。有名なアルゴリズムも楽しく体験します。

はじめに

「アルゴリズム」という言葉、難しそうですね。

でも実は、私たちは毎日アルゴリズムを使っています!

アルゴリズムとは「問題を解く手順」のこと。 より良い方法を見つける「魔法の考え方」なんです。

日常生活のアルゴリズム

身の回りのアルゴリズム

🎯 毎日使っているアルゴリズム

朝の準備を早くする方法

  1. 前日に服を決めておく
  2. 朝ごはんの準備を簡単にする
  3. 持ち物をまとめておく → 時間短縮のアルゴリズム!

部屋を効率的に片付ける方法

  1. まず大きなものから片付ける
  2. 種類ごとに分ける
  3. 使う頻度で配置を決める → 整理整頓のアルゴリズム!

最短ルートで学校に行く方法

  1. いくつかのルートを試す
  2. 時間を計る
  3. 一番早いルートを選ぶ → 経路探索のアルゴリズム!

つまり、「より良い方法を考えること」がアルゴリズムなんです!

アルゴリズムの基本的な考え方

1. 問題を小さく分ける

大きな問題は、小さな問題に分けて解決!

問題:100個のお菓子を10人で分ける

アルゴリズム1(素朴な方法):
1. 1個ずつ配る
2. 10人に配り終わったら、また1個ずつ配る
3. 100個なくなるまで繰り返す
→ 100回配る作業が必要...

アルゴリズム2(効率的な方法):
1. 100 ÷ 10 = 10個ずつと計算
2. 各人に10個ずつ渡す
→ 10回配るだけで完了!

2. パターンを見つける

繰り返しや規則性を見つけて、簡単にする!

問題:1から100までの合計を求める

アルゴリズム1(素朴な方法):
1 + 2 + 3 + ... + 99 + 100
→ 99回の足し算が必要...

アルゴリズム2(賢い方法):
パターンを発見!
1 + 100 = 101
2 + 99 = 101
3 + 98 = 101
...
50 + 51 = 101

101が50個あるので:101 × 50 = 5050
→ 1回の掛け算で完了!

有名なアルゴリズムを体験

1. 並び替え(ソート)のアルゴリズム

バブルソート(泡のように浮かび上がる)

// 数字を小さい順に並べたい
数字 = [3, 1, 4, 1, 5, 9, 2, 6]

バブルソートの手順:
1. 隣同士を比較
2. 大きい方を右に移動
3. これを繰り返す

実行過程:
[3, 1, 4, 1, 5, 9, 2, 6]
 ↓ 3と1を比較 → 入れ替え
[1, 3, 4, 1, 5, 9, 2, 6]
    ↓ 3と4を比較 → そのまま
[1, 3, 4, 1, 5, 9, 2, 6]
       ↓ 4と1を比較 → 入れ替え
...(続く)

最終的に:[1, 1, 2, 3, 4, 5, 6, 9]

2. 探索のアルゴリズム

二分探索(半分ずつ絞り込む)

// 1から100の中から、相手が考えた数を当てる

素朴な方法:
「1ですか?」「2ですか?」「3ですか?」...
→ 最悪100回かかる

二分探索:
「50より大きい?」→ はい
「75より大きい?」→ いいえ
「62より大きい?」→ はい
「68より大きい?」→ いいえ
「65より大きい?」→ いいえ
「63ですか?」→ 正解!

→ たった6回で当てられた!

3. 最短経路のアルゴリズム

迷路を解く

スタート → ゴールの最短ルートを見つける

右手法(簡単だけど遠回りかも):
1. 右手を壁につける
2. 壁に沿って進む
3. いつかはゴールに着く

幅優先探索(確実に最短):
1. スタートから1歩で行ける場所を全て調べる
2. 2歩で行ける場所を全て調べる
3. 3歩で行ける場所を全て調べる
...
ゴールに着いたら、それが最短ルート!

実践的なアルゴリズム

1. じゃんけん必勝法?

// 相手の癖を分析するアルゴリズム
相手の履歴 = []

じゃんけんアルゴリズム:
1. 相手の過去の手を記録
2. 一番多く出している手を分析
3. それに勝つ手を出す

例:
相手の履歴 = [グー, グー, パー, グー, チョキ, グー]
→ グーが4回(一番多い)
→ 次もグーの可能性が高い
→ パーを出す!

2. おつりの計算アルゴリズム

// なるべく少ない枚数でおつりを渡す

金額 = 768円のおつり(1000円 - 232円)

貪欲法アルゴリズム:
1. 一番大きい硬貨から使う
2. 使えるだけ使う
3. 次に大きい硬貨へ

実行:
500円玉:1枚使える(残り268円)
100円玉:2枚使える(残り68円)
50円玉:1枚使える(残り18円)
10円玉:1枚使える(残り8円)
5円玉:1枚使える(残り3円)
1円玉:3枚使える

結果:合計8枚

3. 時間割作成アルゴリズム

// 好きな授業をなるべく多く受ける

授業リスト = [
  {名前: "プログラミング", 開始: 9, 終了: 10},
  {名前: "数学", 開始: 9, 終了: 11},
  {名前: "英語", 開始: 10, 終了: 11},
  {名前: "理科", 開始: 11, 終了: 12},
  {名前: "体育", 開始: 11, 終了: 13}
]

アルゴリズム:
1. 終了時間が早い順に並べる
2. 時間が重ならないものを選ぶ

結果:
- プログラミング(9-10)✓
- 英語(10-11)✓ 
- 理科(11-12)✓
→ 3つ受けられる!

アルゴリズムの評価

どちらが良いアルゴリズム?

⚖️ アルゴリズムの良さ

  1. 速さ(時間)

    • 少ない手順で終わる
  2. 省スペース(メモリ)

    • 少ない記憶で済む
  3. 分かりやすさ

    • 誰でも理解できる
  4. 確実性

    • 必ず正しい答えが出る

例:1から10の合計

// アルゴリズム1:順番に足す
合計 = 0
1から10まで繰り返す:
  合計に足す
→ 分かりやすい!でも10回の計算

// アルゴリズム2:公式を使う
合計 = 10 × (10 + 1) ÷ 2
→ 速い!でも公式を知らないと...

// どちらも正解!場面によって使い分け

自分でアルゴリズムを作ろう

問題:宝探しゲーム

10×10のマス目に宝が1つ隠されています。 効率的に見つけるアルゴリズムを考えてください。

アルゴリズムの例を見る

アルゴリズム1:しらみつぶし

左上から右へ順番に調べる
→ 最悪100マス調べる必要がある

効率:★☆☆
確実性:★★★

アルゴリズム2:ランダム

ランダムに選んで調べる
→ 運が良ければ1回、悪ければ100回

効率:???
確実性:★★★

アルゴリズム3:渦巻き探索

中心から渦巻き状に調べる
→ 宝が中心付近にある可能性に賭ける

効率:★★☆
確実性:★★★

アルゴリズム4:4分割探索

1. 全体を4つに分ける
2. ヒントをもらう(どの区画にあるか)
3. その区画をさらに4つに分ける
4. 繰り返す

効率:★★★
確実性:★★★

よくある質問

Q: アルゴリズムは暗記するもの?

A: いいえ!大切なのは「考え方」を理解すること。

  • 基本的なパターンを知る
  • 自分で工夫してみる
  • より良い方法を探す習慣

Q: 一番良いアルゴリズムは?

A: 場面によって違います!

  • 速さが大事?
  • 分かりやすさが大事?
  • メモリの節約が大事?

目的に合わせて選びましょう。

練習問題

問題1:本の整理

30冊の本を、背の高さ順に並べたい。 効率的な方法を考えてください。

答えの例を見る

方法1:挿入ソート風

  1. 1冊目を置く
  2. 2冊目を、1冊目と比べて適切な位置に入れる
  3. 3冊目を、既に並んでいる本と比べて適切な位置に入れる
  4. 30冊目まで繰り返す

方法2:グループ分け

  1. ざっくり「高い」「中くらい」「低い」に分ける
  2. それぞれのグループ内で並べ替える
  3. グループをつなげる

方法3:トーナメント方式

  1. 2冊ずつペアにして比較
  2. 高い方を次のラウンドへ
  3. 最後まで続けて1位を決定
  4. 残りで2位、3位...と決めていく

問題2:友達探し

クラス30人の中から、誕生日が同じ友達を見つけたい。 効率的な方法を考えてください。

答えの例を見る

効率的な方法

  1. 全員に誕生月を聞く(12グループに分ける)
  2. 同じ月の人だけで誕生日を聞く
  3. 同じ日の人がいたらペア成立!

なぜ効率的?

  • 全員に誕生日を聞く:30回の質問
  • 月で分けてから聞く:30回(月)+ 少人数での確認 → 比較回数が大幅に減る!

実践演習:CommandPlaygroundで体験

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

今日のまとめ

覚えておいてほしい3つのこと

  1. アルゴリズムは「問題を解く賢い手順」
  2. 日常生活でも、より良い方法を考えることがアルゴリズム
  3. 同じ問題でも、いろいろな解き方がある

次回予告

次のレッスンでは、「AIと一緒にプログラミング」を学びます。

  • AIは優秀な助手
  • 人間の創造性 × AIの処理能力
  • 新しい時代のプログラミング

AIと協力して、もっと楽しくプログラミングする方法を身につけましょう!

チャレンジ問題

ミッション:最強のじゃんけんAIを作る

じゃんけんで勝つためのアルゴリズムを設計してください。

条件:

  • 相手の過去の手を分析できる
  • パターンを見つけて予測する
  • ランダム要素も加える(読まれないように)

ヒント:

  • 人間には癖がある(同じ手を連続で出す、など)
  • 直前に負けた手を次に出す傾向がある
  • 3回に1回はランダムにすると読まれにくい
答えの例を見る
じゃんけんAIアルゴリズム:

// データ収集
相手の履歴 = []
勝敗履歴 = []

// パターン分析
関数 次の手を予測():
    // パターン1:直前の手の次に出しやすい手
    もし 相手の最後の手 == "グー" なら
        次は "チョキ" の可能性60%
    
    // パターン2:負けた後の傾向
    もし 直前に負けた なら
        相手は同じ手を出す可能性40%
    
    // パターン3:連続パターン
    もし 相手が2回同じ手 なら
        次は違う手の可能性80%
    
    予測を返す

// 戦略決定
関数 AIの手を決める():
    ランダム値 = 0〜100の乱数
    
    もし ランダム値 < 70 なら
        // 70%は予測に基づく
        予測 = 次の手を予測()
        予測に勝つ手を返す
    そうでなければ
        // 30%はランダム(読まれない)
        ランダムな手を返す

// 学習機能
関数 結果を記録(相手の手, AIの手, 結果):
    相手の履歴に追加
    勝敗履歴に追加
    パターンを更新

このAIは:

  1. 相手の癖を学習する
  2. でも完全に読まれないようランダム要素もある
  3. 対戦すればするほど強くなる!

素晴らしい!アルゴリズムの考え方が身につきました。これで、どんな問題にも「より良い解決方法」を見つけられるようになりました。プログラマーとしての「考える力」が育ちましたね!

さらに学習を続けるには

素晴らしい学習ペースです!次のレッスンに進むには、無料会員登録をお願いします。無料会員では各コース3レッスンまで学習できます。

無料で続きを学ぶ

各コース3レッスンまで学習可能

学習進捗の自動保存

コース修了証明書の発行