アルゴリズム(algorithm)

アルゴリズム(algorithm)とは、

アルゴリズム(algorithm)とは、日本語に訳すと、『演算法、算法』などと呼ばれます。
プログラミングにおけるアルゴリズムの意味は、プログラムを作るときに用いる、問題を解決するための手順・計算方法のことで、 難問を解くときの考え方や問題解決のための方法や手順のことです。
良かれと思って実施したサイトリニューアルが逆にコンバージョン率を下げる事になってしまう事もあります。
※コンバージョンまでの導線や申し込みページをリニューアルするとコンバージョン率に大きな影響を与える事があるので、リニューアル前後は注意深く数値をチェックしておく必要があります。

1951年にデービッド・ハフマン氏によって開発されたアルゴリズム。
ブロックごとに0と1の符号をもたせることで、
「頻出頻度の大きいものには短い符号」「頻出頻度の小さいものには長い符号」が与えられます。
効率の良い問題解決手順をコンピュータに指示するために記述したものがプログラムです。
『アルゴリズム』は、ある一定の手順に従って解決に導くことができる、数学的・論理的な問題を対象にしており、解決への過程は正しく定義され、明確で順を追って次々に物事がなされ、実行されるように表わさなければなりません。

✦プログラムを実行したときに処理の時間が短くて済むものこそ、良いアルゴリズムといえます。

種類は数多く、データーを探索するための「ハッシュ法・二分探索・線形探索・データを整列させるソート法」などもあります。

アルゴリズム 種類一覧

ソートアルゴリズム

例えば、3 1 24……というふうにランダムに数字の値があったとします。
これを、1 2 34……等といった大小関係が定められた、たくさんのデータを小さい順(昇順)、あるいは大きい順(降順)、に並べ替える作業をソート(整列)と言います。

  • 順番に並べ替えるためのアルゴリズムがソートアルゴリズムです。

バブルソート

バブルとは「泡」のことで、並べ替えの過程でデータが下から上へ移動する様子が、泡が浮かんでいくように見えることから名前があります。
単純ですが実行時間は遅くなります。
※多くのソートアルゴリズムの中で、直感的に最も理解しやすいのは、バブルソートです。
※バブルソートは処理が遅くなるため、実行時間の早いクイックソートやマージソートなどがよく使われます。

クイックソート

クイックソートは、データの比較と交換回数が非常に少ないのが特徴で、ばらばらに並んでいるデータやランダムに散らばっているデータ)に対して、最も効率良く並べ替えを実行します。
クイックソートは、『実用上もっとも高速である』とされている並べ替えアルゴリズムで、多くのプログラムで利用されています。
例えば、「軸要素」と呼ばれるデータ値を決定します。この値は、データ全体を2つに分割するときのしきい値として使われます。
軸要素は、分割が均等に行われるように選ぶのが望ましいのですが、その選択に時間をかけると、かえって並べ替えの時間を大きくしてしまいます。
一般には、次のような方法がよく用いられているようです。

  1. データの先頭(左側)の要素を軸要素とする
    32583413
  2. ランダムに1つ選ぶ
  3. ランダムに3つ選んで、その中央値を取る
  4. 左から見て最初に得られた2つの異なる値の大きいほうを取る

※ソートアルゴリズムの最後を飾るのは、やはりクリックソートです。

マージソート

分割統治法の一種。
ばらばらな順番で与えられた配列データは、まず始めに小さい配列へと分解されます。このとき、マージソートでは各配列がほぼ2分割されるように分解していきます。
もっとも小さい配列(要素数1)まで分解されたら、それを順序良く併合していきます。
このとき、2つの配列の先頭から小さい方を取り出して新しい配列を作成するようにすれば、取り出すだけで整列された配列を作成することができます。

ばらばらな順番で与えられた配列データ➡2分割されるように小さい配列へ分解➡2つの配列の先頭から小さい方を取り出して新しい配列を作成(併合) ➡ 整列(例)『12345678』

※完全にランダムな数字が入力される場合はクイックソートのほうが一般的に早く、一部がソートされいてるなど完全にランダムではないようなデータの場合は、マージソートの方が有利になる場合があります。

リスト探索

例えば、1 2 3 4 5……のような数字の列に対し、「3はどこにあるか?」というように目的のデータの場所をを探すアルゴリズムです。

線形探索

単純に、検索のアルゴリズムの一つです。最初から順にデータを見て探していく方法です。
リストや配列に入っているデータに検索を行うにあたって、 先頭から順に比較を行い、見つかれば終了します。

(例)7個のデータを持つリストがある。このときに今要素1がどこにあるか、検索したい。

107126143
  1. 最初の要素である10を見る。
  2. 10は1ではないので、次の要素7を見る。
  3. 7は1ではないので、次の要素12を見る。
  4. 12は1ではないので、次の要素6を見る。
  5. 6は1ではないので、次の要素1を見る。1を見つけることができた。

このリストの場合、要素3を見つけるときで、7個のデータ全てを見ないと、見つけることができません。

二分探索

データのリストを半分ずつに分けて探索することで、計算量を削減できる方法です。
対象のリストがソートされていなくては使用できませんが、高速に探索することができます。
ソート済みのリストや配列に入ったデータ(同一の値はないものとする)に対する検索を行うにあたって、 中央の値を見て、検索したい値との大小関係を用いて、 検索したい値が中央の値の右にあるか、左にあるかを判断して、片側には存在しないことを確かめながら検索していきます。

深さ優先探索=「縦型探索」

木のノードやグラフの探索で、使われるアルゴリズムです。
(グラフの場合はどのノードを根にするか決定する)始まり、バックトラックするまで可能な限り探索を行います。

幅優先、深さ優先探索=「横型探索」

幅優先探索は解を探すために、グラフの全てのノードを網羅的に展開・検査します。
最良優先探索とは異なり、ノード探索にヒューリスティクス(問題の解答を得るための方法論の一つ)を使わずに、グラフ全体を目的のノードがみつかるまで、目的のノードに接近しているかどうかなどは考慮せず探索します。

✦その他、数多くアルゴリズムはあります。

✦実際に目にすることがないですが、至る所に存在しており、コンピューターで大量に情報の収集や解析などを処理し、あらゆる所にアルゴリズムは使用しています。

✦ プログラミングにおいては、アルゴリズムはある程度形が決まっています

「この問題にはこういうやり方が一番効率的である」とか、「この問題はこうやってやれば解ける」などです。
Googleは、検索結果を生成するためのアルゴリズムに200件以上の指標を使用しているとされて、年間数は100回に渡るアルゴリズム調整が行われるとされています。

IT技術の進化のスピードには目を見張るものがありますが、それを支えているのは『アルゴリズム』と呼ばれる処理方法(技術的アイデア)です。
さまざまなアルゴリズムの中でも、コンピュータの進化に革命的な影響をもたらしたとされる偉大なアルゴリズムです。

✦アルゴリズム自体は一般に特許化できません。
アメリカ合衆国では、抽象概念、数、信号の単純な操作だけから成る請求項は「プロセス」を構成しないとされるので、アルゴリズムは特許化できません。

みやあじよのSNSアカウントをぜひフォローしてください