![見出し画像](https://assets.st-note.com/production/uploads/images/87360973/rectangle_large_type_2_f73af1ecfc30a0264e8e005995380ac2.png?width=1200)
プログラミングの基本 〜アルゴリズムを正しく構築する〜
全ては、今後の情報化社会をリードできる人材を育てるために。プログラミングの学校での必修化がスタートして2年が経ちます。
プログラミングの言語は数多く存在します。それぞれの所作(ルール)を理解することもだいじですが、基本的な概念の部分を理解することもだいじです。
前回はプログラミングを語る上で欠かせない存在の「アルゴリズム」と「データ構造」を説明しました。
今回は「アルゴリズム」に着目して、前回から更に深掘りしていきます。
![](https://assets.st-note.com/img/1663754729475-es1BESiaQq.png?width=1200)
フローチャートについて
アルゴリズムについて説明する前に、フローチャートについて説明します。フローチャートとは、フロー(流れ)の図(チャート)という意味で、アルゴリズムを可視化するためによく使われるツールです。
複数のダイアグラムを矢印で結びつけ、それによってアルゴリズムの処理の流れを記述します。代表的なダイアグラムは以下の通りです。
![](https://assets.st-note.com/img/1663755086592-X7lAg7qlVA.png?width=1200)
例えば、これを用いて「1〜10の乱数を発生させ、その値が5以上ならば、その値の数だけ特定の文字列を表示する」というプログラムのアルゴリズムを記述するとしたら、上記のようになります。
この図を見れば分かる通り、入力された値が5以上であれば、その数だけ文字列を表示し、そうでなければプログラムが終了することが分かります。
![](https://assets.st-note.com/img/1663755428892-GKqvPtR95D.png?width=1200)
アルゴリズムの三大処理
アルゴリズムの中でも、最も基本的な処理が3つ存在します。詳細は次の表に示した通りです。全てのアルゴリズムは、必ずこれらの3つの処理の組み合わせで構成されます。
![](https://assets.st-note.com/img/1663755478504-3ZlV3nbj2g.png?width=1200)
このように、これらの3つの処理を組み合わせてプログラムを設計する方法論のことを「構造化プログラミング」と言います。
ただし、この三大処理があるからと言って、それを全てアルゴリズムと呼ぶことはできません。アルゴリズムと呼ばれるためには、2つの重要な条件とされる「正当性」と「停止性」をクリアする必要があります。
正当性:指定された条件を満たす入力(値)が与えられたとき、必ず正しい出力結果を返すこと。
停止性:どのような入力(値)が与えられても、有限時間内に必ず正しく停止すること。
アルゴリズムの正当性を示すために「アサーション」を用いる方法があります。アサーションとは、アルゴリズム(プログラム)の任意の位置で、その時点で満たさなければならない条件が成立しているかどうかを判定することです。
アルゴリズムの正当性で大事なことは、全ての位置でアサーションが成立していること。これを部分正当性と言い、プログラムがその位置で停止すれば、その時点での答えは必ず正しいことを保証します。
これらを満たしたものがアルゴリズムなのです。
![](https://assets.st-note.com/img/1663756828589-5pkUzZtcah.png?width=1200)
アルゴリズムを考える土台を作る
プログラミングを行う上で、アルゴリズムを構築することは必須です。アルゴリズムはどのプログラミング言語を扱うにしても、共通して使われるものです。
小学校や中学校で行うプログラミング教育は、言うなれば「アルゴリズム」をきちんと考えられる土台を作るための教育でもあるかもしれません。
良いアルゴリズムは汎用性が高い上に効率的です。問題解決をスムーズに行えるからこそ、価値のある存在なのです。
![](https://assets.st-note.com/img/1663758166608-kNnCSOh653.jpg?width=1200)
例えば、ロボットの腕をスムーズに動かすために、マシンの回転を複雑にしたいとします。その時のアプローチとしては、
どういう手順で指示を与えるかを考える
簡単で効率よく動くように指示する方法を考える
アルゴリズムはその考え方の基礎です。遠回りして解決することもありますが、それでは処理に時間が掛かるので、なかなか解決に向かいません。
プログラミングは汎用性が高く、高速で、効率よく行うことを重視します。アルゴリズムはその骨格となる部分であり、欠かすことのできない要素なのです。
![](https://assets.st-note.com/img/1663758183458-xe0vjzQN3S.png?width=1200)
おわりに
今回はプログラミングにおいて重要な要素である「アルゴリズム」について深掘りしてみました。
プログラミングが苦手な人というのは、プログラミング言語のルール(所作)を理解していない場合と、アルゴリズムを構築するのが苦手な場合の2パターンに分かれると思います。
アルゴリズムはプログラミングに限らず、様々な場面で応用が効きます。子供・大人に関わらず、ぜひ学んでみてはいかがでしょうか。
-------------------------
最後まで読んでいただき、ありがとうございます。実際は非定期ですが、毎日更新する気持ちで取り組んでいます。あなたの人生の新たな1ページに寄り添えたら幸いです。何卒よろしくお願いいたします。
-------------------------
⭐︎⭐︎⭐︎ プロフィール ⭐︎⭐︎⭐︎
⭐︎⭐︎⭐︎ ロードマップ ⭐︎⭐︎⭐︎
この記事が気に入ったらサポートをしてみませんか?