アルゴリズム
美味しい料理を失敗なく作るために、手順を順序立てて書いた料理のレシピです。
定義 ある問題を解決したり、決められた目標を達成したりするために踏むべき「明確な手順とルールの集まり」です。コンピューターは人間のように臨機応変に融通を利かせることができないため、最初から最後まで1つのステップも漏らすことなく整理された手順があって初めて、正しく処理を行うことができます。
ラーメンの作り方とアルゴリズム
インスタントラーメンを作るとき、鍋に水を550ml入れ、火をつけてお湯が沸騰したら麺と粉末スープを入れ、4分30秒煮込んで火を止める、という手順を踏みますよね。このように、ある目的を達成するために順番に進めていく段階的な手順のことこそが、アルゴリズムです。
コンピューターに指示を出すときもまったく同じです。コンピューターは「水を適当に入れて美味しく作って」というような大雑把な指示をまったく理解できません。その代わりに、「水を550ミリリットル入れる」「水温が100度に達したら麺を入れる」といった、具体的で順番が明確なルールを与えて初めて動いてくれます。
こうした命令の順序が途中で1つでも狂ったり抜け落ちたりすると、コンピューターは停止してしまったり、見当違いな結果を出してしまったりします。だからこそ、解決したい問題を小さな単位に細かく分解し、前後の論理がぴったりと噛み合うように順序立てて整理していく作業が、アルゴリズム設計の基本となるのです。
同じ問題でも解き方によってスピードが大きく変わる
分厚い辞書からある単語を探すとき、最初のページから最後のページまで1枚ずつめくって探す方法があります。一方で、辞書をちょうど真ん中で開き、探している単語が前半分にあるか後ろ半分にあるかを確認しながら、探す範囲を半分ずつ絞り込んでいく方法もあります。
どちらの方法でも、最終的には探したい単語にたどり着くことができます。しかし、かかる時間と労力には途方もない差が生まれます。最初の方法(線形探索)では、単語が10万語あれば最大で10万回めくらなければなりませんが、半分ずつ絞り込む方法(二分探索)なら、約17回めくるだけで見つけ出すことができるのです。
プログラマーたちが日々より優れたアルゴリズムを熱心に研究している理由は、まさにここにあります。まったく同じ機能を持つプログラムであっても、どのようなアルゴリズムを使うかによって、処理が0.01秒で終わることもあれば、数日間コンピューターがフリーズしたまま動き続けることにもなり得るからです。
もう少し正確に言うと
もう少し正確に言うと、コンピューター科学でアルゴリズムと呼ぶためには、いくつかの厳格な基準を満たす必要があります。まず、入力を与えると決められた出力が得られること、各ステップの指示が曖昧でなく明確であること、実行可能な処理であること、そして無限ループに陥るのではなくいつかは必ず終了するという「有限性」を持っていることが求められます。
今日私たちが日常的に触れているYouTubeやNetflixの動画レコメンド機能や、地図アプリによるリアルタイムの最短ルート案内も、すべて高度に設計されたアルゴリズムの賜物です。ユーザーが過去に視聴した履歴や滞在時間を分析して最も満足しそうな動画を選び出したり、無数の道路の渋滞情報をリアルタイムで計算して最も混まない道を提示してくれたりしています。
結局のところ、アルゴリズムとは単なる難解なコンピューターのコードではなく、世の中の複雑で厄介な問題を、最もシンプルで論理的なステップに分解して解決する「思考の技術」なのです。
🤔 よくある誤解
アルゴリズムは人工知能(AI)やプログラミングだけで使われる最先端の技術である。
アルゴリズムはコンピューターが発明されるずっと前から存在していた論理的な手順です。折り紙の折り図、料理のレシピ、足し算や引き算の筆算の計算手順などもすべてアルゴリズムの一種です。
🧺 日常で出会う場面
アルゴリズムとは、ある問題を解決するために踏むべき明確な手順とルールのことです。