今回は、プログラミングでよく耳にする「アルゴリズム」について詳しく解説していきます。
言葉はよく聞くけど、ぼんやりとしたイメージしか分からず、きちんと説明できる人は少ないのではないでしょうか?
具体例も交えて解説していきますので、ぜひご覧ください!
アルゴリズムとは
wikipediaを引用すると次にように書かれています。
アルゴリズム(英: algorithm)とは、解が定まっている「計算可能」問題に対して、その解を正しく求める手続きをさす[2]。あるいはそれを形式的(formal)に表現したもの。
加えて、アルゴリズムの効率性も重要となり、速く大量な計算を実現可能とする。このようなアルゴリズムを、コンピュータへソフトウェア的に実装するものがコンピュータプログラムである。
少し表現が難しいですね笑
アルゴリズムとは、簡単に言い表すとある問題を解決するための「やり方やその手順のこと」を表します。
特にプログラミングにおいては、コンピュータにさまざまな問題を解決させるために、そのやり方を「プログラム」を書いて伝えます。
「どのように問題を解決できるか」、そのやり方や手順のことをアルゴリズムと言います。
大切なのは、この「アルゴリズム」には絶対的な正解はなく、ある結果を得るためのやり方(アルゴリズム)はたくさんあるということです。
では、同じ結果が得られるたくさんのアルゴリズムがあったときに、どのアルゴリズムが良いかというと、特にプログラミングでは
「できるだけ効率よく」
「できるだけ素早く計算・処理してくれる」
ようなアルゴリズムである方が助かりますね。
したがって、プログラミングにおけるアルゴリズムは、「きちんと結果が得られるか」も当然ながら、「より効率よく」「より早く」計算・処理できるアルゴリズムの方が優れていると評価されることになります。
アルゴリズムを具体的に考えてみよう
少しわかりにくいので、身近な具体例で考えてみましょう。
例えば、「広島から東京へ向かう」ということを考えてみましょう。
広島から東京へ向かう方法はいろいろありますね。
出発地点を広島駅、到着地点を東京駅としましょう。
今回は、「徒歩で向かう」「新幹線で向かう」「飛行機で向かう」の3つの方法を考えてみます。
まず徒歩で向かう場合を考えます。
ぶっ通しでずっと歩き続けられるとすると、成人男性が歩く平均の速度を時速3キロとすると、広島駅から東京駅は約800kmなので、時間にして267時間、日数にすると11日ちょっとになります。
お金はかかりませんが、時間がかかりすぎですね。現実的ではありません。
次に新幹線で向かってみましょう。
執筆時点での、広島駅から東京駅までの正規運賃・料金は、自由席で18,380円です。
また、到着までの時間は約4時間となります。
飛行機ではどうでしょうか?
まず、広島駅から広島空港まで向かわなければなりません。専用のリムジンバスを利用することにしましょう。
リムジンバスは大人運賃が1,450円、所要時間が50分です。
さらに広島空港から羽田空港へ飛行機で移動するとすると、料金が約12,000円、時間が1時間20分ほどとなります。
そして羽田空港から東京駅へリムジンバスを利用すると、料金が1,000円、時間は約50分で到着となります。
飛行機を利用した方法だと乗り継ぎが多くて大変ですが、料金は合計14,450円、実移動時間は合計約3時間となりますね。
まとめてみましょう。
方法(アルゴリズム) |
所要時間 |
料金 |
徒歩 |
約11日 |
0円 |
新幹線 |
4時間 |
18,380円 |
飛行機 |
3時間 |
14,450円 |
それぞれのアルゴリズムと、所要時間・料金は上記の通りとなります。
この中だと、徒歩は論外ですが、新幹線より飛行機で向かった方が、時間的にも料金的にも優秀なアルゴリズムといえますね。(ちなみに今回の飛行機はANAやJALでの料金なので、LCCなどを利用するともっと料金が安くなります。あとは、飛行機だと出発着の待ち時間があるので、新幹線と飛行機の時間的には実質大差ないかもしれません。)
このように、さまざまな方法(アルゴリズム)が存在し、比較検討しながらより良いアルゴリズムを使うほうがいいのです。
代表的なアルゴリズム
アルゴリズムには主に
- 探索
- ソート(並べ替え)
- 暗号化
- …
など様々なものがあります。
例えば探索アルゴリズムで代表的なものに「二分探索(にぶんたんさく)」があります。
二分探索は、昇順または降順に並んでいるデータから特定のデータを見つけ出すときに有効なアルゴリズムです。
さいごに
もしプログラミング学習にお困りなら、TechPro(テックプロ)にお任せください!
あなたの現状と目標に合わせて、最適な学習コースのご提案と学習計画のプランニングをお手伝いします。
お問い合わせは以下のボタンからお気軽にお申し込みください!
ご連絡お待ちしています!