使えるだけじゃダメです!

いきなり大袈裟な…と思われるかも知れませんね…
例えば、ほとんどのプログラミング言語でソートをする関数がありますよね?
そのソートは、どのアルゴリズムを使っているかご存知ですか?

ソートの例

例えとして、ソートを用います。まず、ソートアルゴリズムは以下に分類されているのはご存知ですか?

  • 安定ソート
  • 内部ソート
  • 外部ソート
  • 比較ソート

また、ソートにはたくさんのアルゴリズムがあります。
代表的な19種類を以下に示します。
以下の表でnはソートすべき要素数とします。
また、平均計算時間と最悪計算時間は時間計算量を表し、メモリ使用量は空間計算量を表します。
安定性とは、ソートキーが同値の時に入力の順に出力されるものが○、出力の際の順を保証しないものを×で示しています。

名前平均計算時間最悪計算時間メモリ使用量安定性
バブルソートn^{2}1
シェーカーソートn^{2}1
コムソートn\log nn^{2}1×
ノームソートn^{2}1
選択ソートn^{2}n^{2}1×
挿入ソートn+n^{2}n^{2}1
シェルソートn\log ^{2}n1×
2分木ソートn\log nn\log nn
図書館ソートn\log nn^{2}n
マージソートn\log nn\log nn
In-place マージソートn\log ^{2}nn\log ^{2}n1
ヒープソートn\log nn\log n1
スムースソートn\log n1
クイックソートn\log nn^{2}n×
イントロソートn\log nn\log n\log n×
ペイシェンスソートn^{2}n×
ストランドソートn\log nn^{2}n
奇偶転置ソートn^{2}n^{2}1
シェアソートn^{1.5}n^{1.5}1×

このように、単にソートと言っても代表的なアルゴリズムだけで19種類があり、それぞれ時間計算量・空間計算量・安定性が異なります。
では、なぜこんなに数多くのソートアルゴリズムが存在するのでしょうか?考えた事はありますか?
コーディングしている時に、プログラムの時間計算量・空間計算量を検討した事はありますか?

つまり!

プログラムと言うのは動けば良いと言う話ではありません。
確かに近年のコンピュータは高性能でメモリーも潤沢です。でも折角コンピュータが高性能で演算速度が速いにも関わらず、肝心のプログラムの動作が重たければコンピュータの力を存分に引き出すことはできません。

即ち、エンジニアがソースコードを記述する段階で、自分が書いているコードの時間計算量を考えなければ良いプログラムとは言えません。
もちろん、良いプログラムと呼ばれる為には可読性や安定性、保守性などの要素も関わります。
では、それらをどうやって実現すれば良いのでしょうか?
答えは簡単です。自分の記述しているソースコードの基礎となっているアルゴリズムとそのアルゴリズムの数学的証明を知れば良いのです。

このページではソートを例にしましたが、もっともっと色々なことの基礎を知らないまま、コーディングしていませんか?
このブログでは、少しずつですが基礎を紐解いていきたいと思っています。もちろん、アルゴリズムだけではなくソフトウェアパラダイムにも触れていきます。
もし、私が書いてある内容に知らない単語があれば調べてみてください。それでも判らなければお問い合わせください。
プログラミング言語に使われずに、プログラミング言語を使い倒してください!

ご注意

投稿の内さわりの部分までは、どなたでもご覧頂けます。
ですが本質や核心サブスクリプションとさせて頂きます。
ネットを探せば答えが見つかるとお考えの方はたくさんいらっしゃるのは存じています。ですが、その真偽や信憑性や論拠が正しいか否かは判断しずらいのです。それは一重に検索者がどれだけの知見を有しているかによるからです。
このブログでは、できる限り論拠を明らかにして、必要であれば数学的証明を行います。これらは一朝一夕で身に付くものではありません。
筆者は長年に渡るIT業界での業務の間に、正しい知見を得る為には書籍の購入や有料サイトの情報を閲覧する…換言すれば自己投資できなければ自分自身が成長できない事を身を以て体験してきています。
辛辣かも知れませんが、身銭を切って得た情報は元を取ろうと必死になりますが、無料の情報は忘れてしまう事が多いのです。
この経験から一部の記事をサブスクリプションした方のみが閲覧できるようにしていきます。サブスクリプションは1ヶ月単位で、いつでも解約可能です。
皆さんが価値があると判断されたら購読を続けてください。価値が無いと思ったのでしたら解約されて結構です。

Publish Patron Only Posts from your WordPress Site
%d人のブロガーが「いいね」をつけました。