はじめに
「アルゴリズム」という言葉は、高校の情報Iで必ず登場します。さらに、大学入学共通テストの「情報I」でも頻出の重要テーマです。
この記事では、アルゴリズムとは何かを身近な例から説明し、情報Iで押さえるべき表現方法、基本構造、代表的なアルゴリズムまでをまとめて解説します。
この記事でわかること
- 一方で、アルゴリズムの意味と、プログラムとの違いを整理します。
- アルゴリズムの表現方法(フローチャート・擬似コード)
- 順次・分岐・反復の3つの基本構造
- 探索(線形探索・二分探索)と整列(バブルソート・選択ソート)
- 計算量と「良いアルゴリズム」の考え方
アルゴリズムとは「問題を解決するための手順」
アルゴリズムとは、ある問題を解決するための手順や方法のことです。コンピュータに限った話ではなく、日常生活にもアルゴリズムはあふれています。
身近な例:カレーの作り方
- 野菜と肉を切る
- 鍋で炒める
- 水を加えて煮込む
- ルウを入れて溶かす
- 味を見て完成
この「順番に行う手順」がアルゴリズムです。料理のレシピ、乗換案内の経路検索、電車の切符の購入手順なども、すべてアルゴリズムと考えられます。
アルゴリズムとプログラムの違い
| アルゴリズム | プログラム | |
|---|---|---|
| 意味 | 問題を解く手順・考え方 | 手順をコンピュータが実行できる言語で書いたもの |
| 例 | 「1から順に大きい数を探す」 | PythonやJavaScriptのコード |
| 特徴 | 言語に依存しない | 言語ごとに書き方が異なる |
アルゴリズムを考え、それをプログラミング言語で表現したものがプログラムです。先にアルゴリズムを考えることが、良いプログラムへの近道です。
アルゴリズムの表現方法
情報Iでは、手順を人に分かりやすく伝える方法を学びます。代表的なのは次の3つです。
1. 日本語(文章)で表す
「最初に〜する。次に〜する。」のように文章で書く方法です。手軽ですが、あいまいになりやすいのが欠点です。
2. フローチャート(流れ図)で表す
処理の流れを図記号と矢印で表す方法です。
| 記号 | 意味 |
|---|---|
| 端子(角丸の四角) | 開始・終了 |
| 処理(四角) | 計算や代入などの処理 |
| 判断(ひし形) | 条件による分岐 |
| 入出力(平行四辺形) | データの入力・出力 |
| ループ端(台形) | 繰り返しの始まりと終わり |
流れが視覚的に分かるため、処理の全体像をつかみやすいのがメリットです。
3. 擬似コード(疑似言語)で表す
特定のプログラミング言語ではなく、プログラムに近い形で手順を書く方法です。共通テスト「情報I」では、共通テスト用プログラム表記が使われます。
合計 = 0
i を 1 から 5 まで 1 ずつ増やしながら繰り返す:
合計 = 合計 + i
表示する(合計)
アルゴリズムの3つの基本構造
どんなに複雑なアルゴリズムも、次の3つの構造の組み合わせで表せます。
① 順次構造
上から下へ、書かれた順に処理を行う構造です。
例:お湯を沸かす → カップ麺にお湯を注ぐ → 3分待つ
② 分岐(選択)構造
条件によって処理を分ける構造です。「もし〜ならば、〜する。そうでなければ、〜する。」という形になります。
もし 点数 ≥ 60 ならば:
表示する("合格")
そうでなければ:
表示する("不合格")
③ 反復(繰り返し)構造
同じ処理を条件が満たされる間、繰り返す構造です。
i を 1 から 10 まで 1 ずつ増やしながら繰り返す:
表示する(i)
この3構造は情報Iの最重要ポイントです。 共通テストでも、プログラムを読み解く問題でこの構造の理解が問われます。
代表的なアルゴリズム① 探索
探索とは、データの集まりの中から目的のデータを見つけ出す手順です。
線形探索(リニアサーチ)
先頭から順番に、目的のデータと一致するか確認していく方法です。
python
data = [7, 3, 9, 1, 5]
target = 9
for i in range(len(data)):
if data[i] == target:
print(f"{i}番目に見つかりました")
break
- メリット:データが並んでいなくても使える。仕組みが単純
- デメリット:データが多いと時間がかかる
二分探索(バイナリサーチ)
あらかじめ小さい順に並んだデータを対象に、真ん中の値と比べて探す範囲を半分ずつに絞る方法です。
たとえば、1〜100の数を当てるゲームで「50より大きい?」「75より大きい?」と聞いていくのと同じ考え方です。
- メリット:データが多くても、少ない回数で見つけられる
- 注意点:データが整列済みであることが条件
たとえば1,000個のデータでも、二分探索なら最大で約10回の比較で見つかります。線形探索なら最大1,000回です。
代表的なアルゴリズム② 整列(ソート)
整列とは、データを大きい順・小さい順に並べ替える手順です。
選択ソート
未整列の部分から最小値を探し、先頭の要素と交換していく方法です。
バブルソート
隣り合う2つの要素を比べ、順序が逆なら交換する操作を繰り返す方法です。大きな値が泡(バブル)のように端へ浮かんでいく様子から名付けられました。
python
data = [5, 2, 4, 1, 3]
n = len(data)
for i in range(n - 1):
for j in range(n - 1 - i):
if data[j] > data[j + 1]:
data[j], data[j + 1] = data[j + 1], data[j]
print(data) # [1, 2, 3, 4, 5]
良いアルゴリズムとは?計算量の考え方
同じ問題でも、アルゴリズムによって実行にかかる時間や必要なメモリが大きく変わります。この効率の目安を計算量と呼びます。
- 時間計算量:処理にかかる時間の目安
- 空間計算量:必要なメモリ量の目安
データ数を n とすると、次のような違いがあります。
| アルゴリズム | 比較回数の目安 |
|---|---|
| 線形探索 | 最大 n 回 |
| 二分探索 | 約 log₂n 回 |
データが増えるほど、効率の良いアルゴリズムを選ぶことの効果は大きくなります。高校の情報Iでは計算量の厳密な式までは求められませんが、「手順によって効率が変わる」という考え方が重要です。
共通テスト「情報I」対策のポイント
- フローチャートとプログラムの対応を読み取れるようにする
- 変数の値がどう変化するかを、表に書いて追跡する練習をする(トレース)
- 線形探索・二分探索・ソートの動きを手で再現できるようにする
- 反復の終了条件と範囲(何回繰り返すか)を確認する癖をつける
まとめ
- アルゴリズムとは、問題を解決するための手順のこと
- 表現方法は、文章・フローチャート・擬似コードなどがある
- すべてのアルゴリズムは、順次・分岐・反復の3構造で表せる
- 代表例は探索(線形探索・二分探索)と整列(選択ソート・バブルソート)
- 同じ問題でもアルゴリズムで効率が変わるため、計算量の視点が大切
アルゴリズムは、プログラミングを学ぶ上での土台になります。まずは身近な手順を書き出すところから練習してみましょう。
