アルゴリズムとは何か

時計の内部構造プログラム

プログラムの勉強を進めていくなかでアルゴリズムという言葉に出会います。今日はアルゴリズムって何ってところを説明していきたいと思います。

アルゴリズムとは

さて早速ですがアルゴリズムとは何か?

Wikipediaによりますと

数学、コンピューティング、言語学、あるいは関連する分野において、問題を解くための手順を定式化した形で表現したものを言う。算法と訳されることもある。

ということですが、要はプログラムで問題を解くやり方です。

 

プログラムを書いているんだから、問題を解いていることとイコールなんじゃないの? 確かにそうですね、厳密にいうとプログラムはコンピュータに何かを指示する手順を書いたものであり、その手順で問題を解決できるのかという組合せ方が、アルゴリズムとなります。

そのアルゴリズムがあれば(そのアルゴリズムを正しく理解していれば)、どのようなプログラム言語であっても、問題を解くアプローチが同一ですので、問題解決できるプログラムを作ることができます。

 

アルゴリズムって重要なの?

アルゴリズムは重要なのか?

もちろん答えは重要です。簡単なプログラムだとアルゴリズムは意識しないかもしれないですが、ちょっと難しい問題を解こうとするとアルゴリズムをちゃんと理解していないとプログラムを書く手が止まってしまいます。

またアルゴリズムによっては求める答えにたどり着く時間が短縮させることができます。言い換えるとコンピュータに効率的に計算をさせることができます。

有名な例としてはガウスの足し算ですね。ドイツの天才数学者ガウスが1 から 100 までの数字すべてを足すように課題を出された際に、単純に1から100までを足していくのではなく、1と100の和である101が50個あるからだと瞬時に答えを出したという。すなわちこれは等差数列の和を求める公式になります。

 

ガウスの計算方法

 

これを実際にコンピュータに計算させると答えがでるまでの時間が違ってきます。それについて書いた記事はこちらです。

アルゴリズム(ガウスの足し算)
さて今回はアルゴリズムの中で比較的、効果がわかりやすいガウスの計算法というものを記事にしてみたいとおもいます。 ガウスの計算法とは ガウスの計算法とは、ドイツの天才数学者ガウスが「1 から 100 までの数字すべてを足すように」と課題を...

 

この記事にもあるとおり、ガウスの計算法を使った方が、より早く結果を求めることができるので、コンピュータに効率よく計算させるためにもアルゴリズムを知っていると知っていないでは、より高度なプログラムを書いていく際に大きな違いがでます。

 

アルゴリズムは先人の知恵

アルゴリズムって難しそう。毎回考えないといけないの?

いえいえ、代表的なアルゴリズムは先人達がとっくのうちに編み出しており、「芝浜」や「時そば」のような古典落語のように使い古されています。我々はそれをありがたく覚えるだけでいいのです。

 

アルゴリズムの種類

さて古典落語的な代表的なアルゴリズムを以下に示します。ここに書いたのもホント一例です。

 

アルゴリズム分類例有名なアルゴリズム
ソートアルゴリズムバブルソート、選択ソート、挿入ソート
シェルソート、ヒープソート、マージソート
クイックソートなど
サーチアルゴリズム(リスト)リニアサーチバイナリサーチ、ハッシュ探索など
サーチアルゴリズム(グラフ)幅優先探索、深さ優先探索など
数学的なアルゴリズム最大値・最小値、素数判定、ガウスの足し算など
データ圧縮ランレングス符号、ハフマン符号など
セキュリティ共通鍵暗号方式、デジタル証明書、ハッシュ関数など

 

これが実際どんなものかについては、リンクのあるものについては、この「もしプロ」ブログの中でも取り上げて説明しています。それ以外のものについて、全てを説明するとなると、それって大学や専門学校で学ぶような領域に入ってくるので、それは専門書に任せるとします。

 

とはいえ、専門書だととっつきにくいので市販で易しく解説している本を紹介しますね。

まずはデータの型の説明と簡単な数学アルゴリズムおよびソートアルゴリズム・サーチアルゴリズム(リスト)について、イラストで表現し、さらに実際にプログラム記載例をJavascript/PHP/C/Java/Swift/Python/BASIC/Scratchの8言語で記載しているため初学者にはとても理解しやすい本がこちらです。


また、種類の多さという意味では上記の表で記したアルゴリズムがほぼ網羅されている本がこちらです。ただ、アルゴリズムとプログラミング図鑑のようにプログラム記載例がないため、こちらの本はアルゴリズムを広く浅く理解するという本になります。

 

なお、こちらの本はアプリも存在します。ある程度は無料でみることができ、すべてのアルゴリズムを見る場合は400円ほどの有料課金となります。本と違い、アプリでは動画で動きを確認できるため、より理解が深まりますよね。

iOS版

‎アルゴリズム図鑑
‎App Storeの「Best of 2016 今年のベスト」に選ばれた、見て分かる、試して分かるたのしい「アルゴリズム」の図鑑です。幅広い分野のアルゴリズムを、アニメーションでやさしく解説。さまざまに試せる「実験モード」で理解がさらに進みます。暗号化、セキュリティなど身近なアルゴリズムも満載。さあ、アルゴリズムの世...

 

Android版

アルゴリズム図鑑 - Google Play のアプリ
見て分かる、試して分かるたのしいアルゴリズムの図鑑。幅広い分野のアルゴリズムを、アニメーションでやさしく解説。さまざまに試せる実験モードで理解がさらに進みます。暗号化、セキュリティなど身近なアルゴリズムも満載。さあ、アルゴリズムの世界に旅立ちましょう! 【 カテゴリと掲載項目例 】 《 ソート 》 バブルソート、ヒ...

 

まとめ

今回はアルゴリズムとは何ってことで記事を書きました。

アルゴリズムは今後、効率的なプログラムを書いていく上で代表的なものだけでも覚えておいて損はないです。以前の「大学で学ぶプログラミングとは」の記事でも書きましたが、情報工学を学ぶ意義は、このアルゴリズムを体にしみこませるというところでもあります。単純なキーパンチャー的なプログラマーと、そうではないプログラマーの違いは、このアルゴリズムを理解できるかどうかにあると思っています。

でも、言った通り古典落語的な代表的アルゴリズムを理解しているだけで、まずは十分です。教育用プログラミング言語でちょっと力がついてきたら、ここで紹介した本やアプリを使って、アルゴリズムの勉強にもトライしてみましょう。

逆に新しいアプローチの解法は新作落語のようなもの、あなたが世界中の誰も考えたことがないようなアルゴリズムを編み出したら、世界は変わるかもしれません。

コメント

タイトルとURLをコピーしました