アルゴリズムって、コンピュータの世界で言うとプログラムのこと?

こんにちわ。

パソコンをはじめとするコンピュータのプログラムの話をしていると、よく出てくるのが「アルゴリズム」という言葉です。

いかにも理系の言葉ですよね。

NHKのアルゴリズム体操もこの単語から来ているのでしょうか?

スポンサーリンク
スポンサーリンク




アルゴリズムはコンピュータの世界だけの話ではない

アルゴリズムとは、

アルゴリズムとは、数学、コンピューティング、言語学、あるいは関連する分野において、問題を解くための手順を定式化した形で表現したものを言う。

ー出典:ウィキペディア

だそうです。

つまりは、問題や課題には何らかの答えがあるわけで、アルゴリズムとは正しくその解を得るための具体的手順や根拠を言うようです。

コンピュータの場合、問題や課題があってその答えを導き出すアルゴリズムが存在するときに、そのアルゴリズムをソフトウェア的に実装するものがプログラムということになります。

コンピュータは、とても高速に物事を正確に処理することができます。

しかし、その計算が正しく行われるか?とか、効率的に行われるか?とかは、そのアルゴリズムに左右されるということです。

アルゴリズムをプログラムに置き換える

コンピュータ上でアルゴリズムをプログラムに置き換えるには、一定の処理が必要です。

要はプログラムという一定の型にはめてやらないといけません。

コンピュータのプログラミングってんなんだ?基本的なことを一通りまとめてみました。
こんにちわ。 今回はプログラミングの話です。 ちなみにぼくは10代、20代の頃は、趣味でプログラミングをやってい...

たとえば、データは何らかの入力源から読み込まれ、結果は何らかの出力先(機器)に書かれるか、次の処理の入力となるよう保持される必要があります。

また、保持されたデータはアルゴリズムを実行する実体の内部状態の一部とみなされ、その状態をデータ構造に保持したりすることが必要です。

計算過程においては、アルゴリズムは厳密に定義されていなければならず、また、全ての状況において処理可能な形になっていないといけません。

そして、多くのプログラム言語が手続型であることから、その計算順序は最も重要で、命令列は、先頭から最後尾に向かって逐次的に実行されるよう記述される必要があります。

このようにして、アルゴリズムをプログラムに置き換えていくのですが、この考え方をより形式的にしたものを制御構造といいます。

なんだか難しいですね。

自分で説明していても、そう感じます。(笑)

アルゴリズムの表現方法

アルゴリズムを表現するには様々な記法があります。

自然言語でもいいですし、その他には擬似コード、フローチャート、プログラミング言語などで表現することができます。

ただし、アルゴリズムを自然言語で表現した場合は冗長であいまいになる傾向があります。

そのため、複雑なアルゴリズムや技術的な場面では単独では、擬似コードやフローチャートが使われます。

また、直接アルゴリズムをプログラミング言語で示すこともよくあります。

プログラムの世界でのよく知られているアルゴリズム

では、プログラムの世界でよく知られているアルゴリズムを少しご紹介します。

ソートアルゴリズム

例えば、3 1 2……というふうにランダムに並ぶ数字を、1 2 3……等といった順番に並べ替えるためのアルゴリズムがソートアルゴリズムです。

主なソートアルゴリズムをご紹介しますが、詳細を知りたい人は自分で調べてくださいね。

バブルソート

隣の値と大小比較をし、交換を繰り返していく方法です。
単純ですが実行時間は遅くなります。

クイックソート

分割統治法の一種で、計算量は入力データにより変わります。

マージソート

こちらも、分割統治法の一種。
実際に実装するとバブルソートは処理が遅くなるため、実行時間の早いクイックソートやマージソートなどがよく使われます。

クイックソートとマージソートでどちらが適しているかは、入力データ次第です。

探索アルゴリズム

複数のデータの中から、目的のデータがどこにあるかを探すアルゴリズムです。

リスト探索

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

単純に、最初から順にデータを見て探していく方法は、線形探索と言います。

一方、データのリストを半分ずつに分けて探索することで、計算量を削減できる方法を、二分探索と言います。

対象のリストがソートされていなくては使用できませんが、高速に探索することができます。

木探索、グラフ探索

木ように枝分かれしたノードやグラフの探索で使われるアルゴリズムです。

実際には幅優先または、深さ優先探索が行われます。

幅優先探索は、隣接ノードを探索を繰り返して解を探索する方法です。

一方、深さ優先探索は、ノードの子がなくなるまで深く探索し、解が見つからない場合は探索していないノードまで引き返し、再度ノードの子がなくなるまでを繰り返す探索方法です。

その他、探索アルゴリズムとしては、巡回セールスマン問題などのグラフ探索や、文字列探索などがあります。

その他の主なアルゴリズム

  • レイトレーシングなどの計算幾何学の分野に関するアルゴリズム
  • RSA暗号などの暗号アルゴリズム
  • パターン認識と機械学習のアルゴリズム
  • 誤り検出、訂正のアルゴリズム

他にも色々ありますが、いずれも理系の世界。

学術的すぎてぼくにはついていけませんので、この辺で終わりとしたいと思います。

最後までおつきあい、ありがとうございました。

スポンサーリンク
スポンサーリンク




スポンサーリンク




シェアする

  • このエントリーをはてなブックマークに追加

フォローする