開発
アルゴリズムについて
nagamine
みなさん、アルゴリズムというものをご存じでしょうか?
プログラマーはもちろん、IT関係者、研究者、他の業界でも知っている方は少なくないでしょう。
アルゴリズムとは
数学、コンピューティング、言語学、あるいは関連する分野において、問題を
解くための手順を定式化した形で表現したものを言う。算法(さんぽう)と訳
されることもある。 – Wikipedia
さらに言えば、理論的に証明がなされ正確性や実行時間がわかっているものとそうでなものに分けられます。
アルゴリズムはどういうときに使うのか
アルゴリズムは何か問題に直面したときに、その問題を解決するための手順として使用します。コンピュータを利用するうえで、問題視される点としては、計算速度の速さ、1度に使うメモリーの容量、計算して値を求める際の精度の高さ、などが挙げられます。
アルゴリズムの有用性
プログラムをコーディングしているとき、あらゆる問題に直面します。
- 値を求めようとすると精度が落ち正確性が欠けてしまう
- 計算式を書いてみたものの実行に時間が掛かり過ぎて使い物にならない
- どうやって計算をすればその値を求められるか解らない
- プログラムを書いたものの、他の人が見たら理解できない
- 実行してみたら想定と異なった値が求まっていた
3以外のものに関してはどれもアルゴリズムを持っていると言えるかと思いますが、独自のアルゴリズムを実装した時に上記のことが起こってしまうことが多いです。特に独自に書いたものは数学的な証明が行われておらず、正確性や実行時間を明確にしていないものが多いです。また、証明するにしても高度な数学的知識や応用をする必要があることもあります。
こういった理由から上記の問題に直面したとき、理論的に証明されているアルゴリズムを使うことが推奨されます。また、各言語を使用するときにソートなどのライブラリが登録されていますがそれらの多くは理論的に証明されいているアルゴリズムを利用していることが多いです。しかし、多くのアルゴリズムは一般化されているため応用をしないと使えないというものもあります。そのため、どのアルゴリズムを使うべきか見極めることも必要です。
プログラムを書くとき、とりあえず値がでているから大丈夫、考えている時間がない、アルゴリズムを知らないなどの理由で、力技で実装してしまう時があるかと思います。確かに、技術も進歩してきているためあまり気にしなくても上手くいってしまうこともありますが、そうした場合思わぬところでハマってしまうことにつながってしまいます。そういうことを避けるためにも、アルゴリズムを学ぶ必要性は十分にあると僕は思います。