Introduction
コンピュータ用語でよく聞く言葉の一つ「アルゴリズム」についての説明です。
プログラミングをする際にもよく聞く言葉ですね。
プログラムはアルゴリズムをプログラム言語で記述したものです。
では、そのアルゴリズムとは何なのでしょう?
インターネットの検索結果にも複雑なアルゴリズムが使われているみたいだよ
アルゴリズムとは
アルゴリズムとは物事の問題を解決する手順を決まった形で表現したものです。
「決まった形」と書きましたが、その方法はいくつも考えられます。
例えば「言葉」でも表現できますし、図で表現することもできます。
例として、レストランの注文受付の手順を考えてみましょう。
その手順を言葉で表現すると、
ざっくり考えるとこんな感じでしょうか。あくまで細かいことを省いた大まかなイメージですが。
これが言葉で表現したアルゴリズムと言えるでしょう。
さすがに分かりにくいですね。アルゴリズムを表現する際には言葉ではなく図を使用することが多いです。
その代表が「フローチャート」です。「流れ図」とも呼ばれます。
今の手順をフローチャートにしてみると下のようになります。
言葉で書くよりも分かり易くなりますね。
また、図で表現する方法としては他にも「アクティビティ図」や「状態遷移図」などもあります。
これらは別のページで説明します。
また、情報処理の試験ではアルゴリズムの表現に「疑似言語」が使用されることが多いです。
共通テストでも疑似言語が使用されています。
<疑似言語の例>
そのアルゴリズムをコンピュータが実行できるように記述したものがプログラムです。
プログラムには通常「プログラミング言語」を使用します。
<プログラムの例>
プログラミングにおけるアルゴリズムとは、コンピュータでの計算や情報処理の手順を決まった形式(プログラミング言語)で表現したものと言えます。
プログラムはアルゴリズムをコンピュータに分かる言語で記述したものなんだね
アルゴリズムの基本構造
プログラムでのアルゴリズムには基本となる3つの構造があります。
これから紹介する3つの構造が複雑に組み合わさって様々な処理がコンピュータで行われているのです。
この3つの構造は必ず押さえておきましょう。
※説明での図はフローチャートを使用しています。
順次構造
各処理が直線に並ぶ構造。
そのまんま、順番に処理を行うだけです。
難しく考える必要はありません。
分岐構造
選択構造ともいいます。
条件によって処理が分かれる構造。
「はい」「いいえ」を「真」「偽」や「1」「0」で表現することもあります。
また、基本的に2方向へしか分岐しません。
繰り返し構造
反復構造ともいいます。
繰り返し実行することを「ループ」とよぶので、ループ構造とも呼びます。
条件が満たされている間、処理を繰り返し実行する構造。
最初の「ループ端」に「~から~まで繰り返す」のように、繰り返しの条件を記入します。
この3構造はプログラミングをしていると当たり前のように使うことになるよ
コンピュータで利用するアルゴリズムで気にすべきこと
アルゴリズムを考える時には以下のことに注意しましょう。
- 正確さと効率の良さ
- 必ず終了すること
- 曖昧さがなく判断に迷わない
コンピュータを相手にしたアルゴリズムでは、これらを意識することが大切です。
同じ処理を行うにもアルゴリズムは様々な種類を考えることができます。
例えば英単語を辞書で引くことを例に考えてみましょう。
単純に単語を探していくのであれば1ページ目の「A」から順番に探していくことになります。
- 辞書の1ページ目を開く
- 単語を取り出す
- その単語と調べている単語を比較する
- 同じ場合は終了
- 違う場合は次の単語を取り出して「3」番から繰り返す。
このような手順になりますね。
でも、このアルゴリズムだと辞書の最後の方に調べたい単語が存在した場合は時間がかかってしまいます。
辞書に「A」~「Z」の見出しを付けておけば早くなりそうです。
- 調べる単語の最初の1文字を取り出す
- 「A」~「Z」の見出しと一致する最初のページを開く
- 単語を取り出す
- その単語と調べている単語を比較する
- 同じ場合は終了
- 違う場合は次の単語を取り出して「4」番から繰り返す。
どうでしょう。「A」から「Z」の見出しを用意することで単語を探すスピードが速くなりました。
同じ処理をするのでも、無駄を省き効率的なアルゴリズムを使用するとコンピュータへの負荷も低くなります。
効率の良いアルゴリズムを用意すれば、問題解決のスピードもアップするのです。
押さえておきたいポイント
学生の方が押さえておくポイントだよ
- アルゴリズムとは
- アルゴリズムの基本の3構造
- アルゴリズムを考える時に気を付けたいこと
練習問題
◎ 各問題をクリック(タップ)すると答えが出てくるよ
プログラミングの問題を解くには、アルゴリズムを理解できるかが大切みたいだよ