プログラミングとアルゴリズムの関係性は?
初心者なんだけど、アルゴリズムの種類が知りたい!
今回はこういった疑問にお答えしていきます。
この記事を読むことで以下のことが分かるようになります。
- プログラミングのアルゴリズムとは何か
- プログラミングとアルゴリズムの関係性
- プログラミングのアルゴリズムの種類
プログラミング経験のある柏倉元太(@genta_oaks)が監修。プログラミングを始めて約5年。Web系フリーランスとしての経験がありながら、現在はWebマーケティング企業「株式会社オークス」の代表取締役。
それでは早速見ていきましょう。
プログラミングのアルゴリズムとは?【初心者必見】
では、そもそも「アルゴリズム」とは何なのでしょうか?
コトバンクから引用します。
問題を解決するための方法や手順のこと。問題解決の手続きを一般化するもので、プログラミングを作成する基礎となる。
アルゴリズムは1つの問題に対し、複数ある場合が多い。
引用:コトバンク
つまり、アルゴリズムは効率の良いプログラムを作成するために用意された手順や計算方法になります。
プログラミングとアルゴリズムの関係性
ここではプログラミングとアルゴリズムの関係性を見ていきます。
プログラミングは基本的にビジネスの課題を解決するためや新しい機能をリリースするためにあります。
ですが課題を解決できるようなものなら、どんなプログラムでも良いというわけではありません。
同じシステムを構築して新しい機能を実行する場合でも、より効率的にユーザーからのリクエストやデータを処理できるプログラムを作ることが重要なのです。
つまり、最終的にアルゴリズムが僕たちの生活をより豊かにしてくれているというわけです。
プログラミングにおいてアルゴリズムを理解することは必須
また問題が起きた際にも、コンピューターの中でどのような処理がされているかを知っていないと、解決方法を考えることはもちろん出来ません。
そして自分でアルゴリズムを開発していきたいと考えている方にとっては、その中身をしっかり理解することは必須と言っても過言ではないでしょう。
プログラミングのアルゴリズムの種類は無数にある
実はプログラミングのアルゴリズムの種類は無数に存在します。
プログラミングのアルゴリズムは無数にあったら勉強はどうやってしたらいいの?
おそらくこんな疑問が出てくるでしょう。
そのため、今回は代表的なプログラミングのアルゴリズムの種類について解説していきます。
まとめると以下の通り。
- ソートアルゴリズム
- 探索アルゴリズム
- 計算&幾何学アルゴリズム
一つ一つ解説していきます。
ソートアルゴリズム
例を挙げてみましょう。
「3 1 2……」というようにランダムに数字の値が羅列されているとしましょう。
これを「1 2 3……」等といった順番に並べ替えるためのアルゴリズムがソートアルゴリズムです。
ソートには様々なな手法があります。
それぞれの手法の評価基準には以下のようなものがあります。
- 平均計算時間
- 最悪計算時間
- 安定ソートかどうか
- 実行時のメモリ使用量..etc…
更に深堀りしていきます。
バブルソート
数字が並んでいる場合を想像してください。
隣の値と大小比較をしていき、交換を繰り返していくのがバブルソートです。
かなり単純ですが、実行時間は遅くなってしまいます。
- 最悪計算時間:n^2
- 安定ソート:〇
バブルソートは処理が遅くなるため、実行時間の早いクイックソートやマージソートなどがよく使われます。
クイックソート
クイックソートは、分割統治法の一種です。
そのため、計算量は入力データによって変わってきます。
- 平均計算時間:n log n
- 最悪計算時間:n^2
- 安定ソート:×
マージソート
マージソートも分割統治法の一種になります。
- 計算量時間(平均、最悪ともに)n log n
- 安定ソート:〇
クイックソートとマージソートでどちらがいいのかは、入力データ次第というところがあります。
完全にランダムな数字が入力される場合であれば、クイックソートのほうが一般的に早いです。
しかし、一部がソートされいてるなどや、完全にランダムではないようなデータの場合は、マージソートの方が有利になる場合もあります。
ソートに関しては、n log nより早く処理出来るアルゴリズムは、特定の条件などを除き、存在しないということが証明されています。
探索アルゴリズム
では、プログラミングのアルゴリズムの種類2つ目を見ていきましょう。
探索アルゴリズムとは、膨大なデータの中から目的のデータがどこにあるかを探すアルゴリズムなります。
想像してみてください。
たくさんの数字が並んでいる場合、特定の数字を見つけたい場合、一つ一つ確認していては時間のムダです。
つまり、それをより効率的にしていく意味で探索アルゴリズムがあります。
より深くまで開設していくと難しくなってしまうので今回は割愛します。
探索アルゴリズムの種類については以下の通りです。
- リスト探索
- 木探索
- グラフ探索
- グラフ探索固有
- 文字列探索…etc..
計算&幾何学アルゴリズム
計算幾何学の分野に関するアルゴリズムは、以下のような種類があります。
凸包アルゴリズム
いくつかの点の集合に対して、それらを含む最小の凸多角形を求めるアルゴリズムになります。
多角形を求めたい場合に使われます。
レイトレーシング
空間内の物体の集合に、半直線にどの物体が最初に交わるかを求めるアルゴリズムになります。
例を挙げてみましょう。
3Dゲームなどで光がどの物体に当たるかを求めるためにも使われています。
プログラミングの勉強に大切なアルゴリズムを学習するためのおすすめ本
プログラマーの能力の基礎ともいえるのがこのアルゴリズムに関わる能力と言っても過言ではありません。
その理由はその能力の違いによって、アプリケーションの品質や生産性が大きく変わってしまうため。
そんなアルゴリズムを学習するために、おすすめの本をご紹介。
まとめると以下の2つになります。
- アルゴリズム図鑑 絵で見てわかる26のアルゴリズム
- なっとく!アルゴリズム
1つ1つ解説します。
アルゴリズム図鑑 絵で見てわかる26のアルゴリズム
アルゴリズムはどんな言語でプログラムを書くにしても不可欠ですが、現場で教わることはめったになく、自分で学ぶのも難しいものでしょう。
そのためこちらの本は、アルゴリズムを独学する人のために作られました。
初心者でも学ぶときにのイメージがしやすく、復習するときには思い出しやすくなるよう、基本的な26のアルゴリズム+7つのデータ構造をすべてイラスト化しています。
ソートやグラフ探索などの「動き」を図を多用することで、考え方や仕組みを理解する手助けしてくれています。
アルゴリズムの世界を、楽しく学べるおすすめの本です。
価格は¥2,356。
なっとく!アルゴリズム
プログラミングにおいて、アルゴリズムは欠かせませんが、それはAIやIoTに代表される機械学習やディープラーニングに至るまで変わりません。
プログラミングは裏を返せば、アルゴリズムをいかにして見通しよく実装するかにあるため。
そこでこちらの本は、イラストを多用し「デファクト」と言われるアルゴリズムがなぜデファクトなのか。場合によってはデファクトたりえないのはなぜなのか。
その差を分ける基準は何なのかを簡単に解説してくれる良書です。
アルゴリズムと聞くとアレルギー反応をおこす方でも、安心してその奥深いアルゴリズムの世界の扉から漏れてくる、豊かさの一端に触れることが出来るはず!
価格は¥2,475。
アルゴリズムはプログラミングの根底
いかがだったでしょうか?
「プログラミングの勉強に大切なアルゴリズムとは?その関係性と種類」というテーマでお伝えしました。
今回はご説明したことは、かなり難しいと思います。
しかし、探索アルゴリズムとソートアルゴリズムのことについて理解していればある程度は大丈夫でしょう。
ほかにもアルゴリズムはたくさんあります。
アルゴリズムはプログラミングの根底にあるものなので、一度勉強してみることおすすめします。
今回ご紹介したおすすめの本も参考にしながら、プログラミングとアルゴリズムの世界を楽しみましょう!