C言語学習ポータル(無料版) 学習コンテンツ プログラミング的思考 アルゴリズム——手順を組み立てる

🧭 プログラミング的思考

アルゴリズム——手順を組み立てる

無料公開版に収録・読む目安 12分

🎯 アルゴリズムの条件を理解し、順次・分岐・反復の3つの型で手順を組み立てられる

分解して、パターンを見つけて、抽象化する。ここまでで材料は揃いました。最後の道具は、それらを動く順番に組み立てることです。この組み立てた手順をアルゴリズムと呼びます。

アルゴリズムと呼べる条件

ただの思いつきの手順とアルゴリズムを分けるのは、次の3つです。

  1. 明確 — どの手順も、解釈のブレなく実行できる
  2. 有限 — いつか必ず終わる(永遠に続く手順はアルゴリズムではない)
  3. 入力と出力がある — 何を受け取って何を返すかがはっきりしている

「良い感じに並べる」は明確ではないので失格。「1から順に数を足し続ける」は終わらないので失格です。

手順は3つの型でできている

驚くことに、どんなに複雑なプログラムも、次の3つの組み合わせだけで書けます(構造化定理と呼ばれる有名な事実です)。

たった3つです。C言語の if も for も while も、この3つの型に名前を付けたものにすぎません。

師範道具は3つでよい。組み合わせが無限なのじゃ。

日常にもこの3つしかない

朝の支度で確かめてみましょう。「顔を洗う→歯を磨く」は順次。「雨が降っていれば傘を持つ」は分岐。「かばんに必要なものが全部入るまで詰める」は反復です。私たちは無意識にこの3つを組み合わせて生活しています。プログラミングが特別な才能を必要としないと言われるのは、この意味においてです。

ちなみにアルゴリズムという言葉は、9世紀の数学者アル=フワーリズミーの名に由来します。1000年以上前から、人は「誰がやっても同じ答えにたどり着く手順」を大切にしてきたわけです。

例: 一番背の高い人を見つける

10人が並んでいます。一番背が高い人を見つける手順を組み立ててみましょう。人間なら一目で分かりますが、一度に1人しか見られないという制約でやってみます(これが機械の見え方です)。

  1. 最初の人を「暫定1位」として覚える
  2. 次の人を見る
  3. その人が暫定1位より高ければ、暫定1位を入れ替える
  4. 最後の人まで、2と3を繰り返す
  5. 最後に残った暫定1位が答え

順次(1)・反復(4)・分岐(3)が全部入っています。しかもこの手順は、10人でも1万人でもそのまま通用します。手順が人数に依存しない——これが良いアルゴリズムの手ざわりです。

覚えておきたい癖

手順を作ったら、必ず「例外」を確認してください。

この端っこの場合を考える癖が、のちにバグの数を大きく減らします。プロと初心者の差が最も出るのは、実はここです。手順を作ったら「0個のとき」「1個だけのとき」「全部同じとき」の3つを当ててみる。習慣にする価値のある確認です。

要点まとめ

アプリで演習問題まで解く(無料・登録不要)

この項目に出てくる用語

アルゴリズムあるごりずむ

問題を解くための手順を、誰が読んでも同じ結果になるように整理したもの。料理のレシピのように、順序立った具体的な手続きのことを指す。同じ問題でも、良いアルゴリズムを選ぶことで処理速度が大きく変わることがある。

同じトラックのほかの項目

問題を分解する(Decomposition)大きな問題を、手が動く大きさの小問題に分ける考え方を身につける パターンを見つける(Pattern Recognition)分解した作業の中から共通点・繰り返しを見つけ出せるようになる 抽象化——捨てる勇気目的に必要な情報だけを残し、残りを捨てる「抽象化」の考え方を理解する 擬似コードで書いてみる擬似コードの書き方を知り、日本語まじりで手順を表現できるようになる フローチャート入門フローチャートの基本記号を覚え、処理の流れを図で読み書きできる 日常の問題をアルゴリズム化する身近な問題を、抜けのない手順として書き下せるようになる 良い手順・悪い手順——効率の予感同じ結果でも手順によって手数が大きく変わることを、探索の例で実感する
‹ 抽象化——捨てる勇気 擬似コードで書いてみる ›

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版 / BOOTH