すずひろドットコム       アクセス数(2003.05〜)
本日:6
昨日:56
累計:109308
すずひろパソコン道場
 
        ホーム > パソコン道場 > 上級編 > 1.プログラミングをはじめるにあたって > 1−2.アルゴリズムの重要性    
 
パソコン教室 パソコン道場 創造工房 メールマガジン ショッピングモール
プロフィール 著書 お問い合わせ リンク サイトマップ
 
     
1−2.アルゴリズムの重要性
     
アルゴリズムは、プログラミング言語的にみると計算の手順ということになります。

計算の手順と聞くと、難しい印象をもたれる方も多いと思いますので、もっと私たちの身近なもので考えてみましょう。

たとえば、リンゴの皮をむいて切り分けるとき、皮をむいてから切り分ける方法と、切り分けてから皮をむく方法とがあると思います。

どちらも、お皿の上に置いてしまえば同じなのですが、皮をむく過程が異なっています。

つまり、手順が異なっているだけで完成したものは同じです。

リンゴの皮をむいて切り分ける2つの方法をとっても、「やりやすいのはどちらか?」「早くできるのはどちらか?」というような賛否両論があると思います。

そして、どちらがよいのかは、いちがいに決められないと思います。

物事には何らかの手順があるものです。

そして、その手順は幾通りかがあるものです。

プログラミング言語アルゴリズムにも同じようなことがいえると思います。

そもそも、よいアルゴリズムとはどのようなものなのでしょうか?

パソコンが高価で、性能も今と比べると貧弱であった頃、よいアルゴリズム処理速度が速いものとされていました。

いかにして速く動作するアルゴリズムを考えるかでプログラマーの技量が決まってしまうこともしばしば見受けられました。

そのため、プログラマーは、早く処理を行うアルゴリズムを考えることを競っていました。

その結果、作成した本人しか理解できないような複雑なアルゴリズムが生まれ、後のメンテナンスに支障をきたすことも珍しくありませんでした。

「俺は天才だぁ〜」といっていたプログラマーが作成したプログラムを、その人が去った後にメンテナンスできるプログラマーがいなかったなんてこともありました。

パソコンが安価で高性能になった現在、よいアルゴリズムのとらえ方も変化してきました。

どんなに実行速度が速くても、信頼性に欠けるものやメンテナンスがしにくいものは、よいアルゴリズムとはいえない。

つまり、確実に動作するシンプルなアルゴリズム

これが、現在のよいアルゴリズムのとらえ方になってきています。

現在では、プログラミング言語で頻繁に使用するアルゴリズムは、汎用性のある関数サブプログラムなどであらかじめ用意され、新規にアルゴリズムを考えることは少なくなってきました。

その汎用性のある関数サブプログラムなどを組み合わせていけば、たいていの処理を行うことができます。

そして、汎用性のある関数サブプログラムなどを部品として扱えば、複数の部品を組み合わせて1本のプログラムを作成することができます。

アルゴリズムは料理とよく似ています。

料理の場合、決まった材料と調理の手順が示されているレシピにしたがって作業を進めていきます。

そして、よく使う材料は、下ごしらえした状態で手に入れることもできます。

この下ごしらえした材料は、アルゴリズムでいうところの関数サブプログラムとよく似ています。

このように、アルゴリズム計算の手順でレシピは料理の手順、どちらも手順を表しているという点でよく似ています。

プログラミングと料理。

一見すると共通する要素が何もないと思われがちですが、このようなところで似ている部分もあるのです。

その他、アルゴリズムにおいて、とても重要なことは適材適所が必要であることです。

そこで、例としてプログラミングで頻繁に利用するソート(並び替え)アルゴリズムを考えてみましょう

ソートアルゴリズムは、現在までいくつかが考え出されています。

おもなアルゴリズムは、低速アルゴリズム単純選択ソート単純挿入ソートバブルソート高速アルゴリズムヒープソートシェルソートクイックソートマージソートなどが有名です。

そこで、どのアルゴリズムを使用するかということになった場合、通常はプログラムの実行速度を上げるために高速アルゴリズムを使用したほうがよいと考えがちですが、ここには落とし穴があります。

最速のCPUと大容量のメモリとHDD容量(リソース)を搭載したコンピュータであればとくに気にする必要はありませんが、Windowsの場合、マルチタスクで複数のプログラムが動くということを常に念頭に置いておかなければなりません。

それは、高速アルゴリズムの場合、その代償としてリソースを多く必要とすることがあるからです。

そのため、ひとつのプログラムだけが多量のリソースを消費した場合、マシン全体のパフォーマンスが低下するといった事態が発生してしまいます。

そこで適材適所ということが重要になってくるのです。

最近のプログラミングは、既存の関数サブプログラムを使用することで、部品レベルのアルゴリズムを1から考えなければいけないということは少なくなってきました。

そうはいっても、プログラム全体のアルゴリズムはプログラマーが考えなければいけませ
ん。

このように、アルゴリズムはプログラミング上とても重要です。

そこで最後に、アルゴリズムキーポイントを整理しておきましょう。

・アルゴリズムはメンテナンス性を重視し「確実に動作するシンプルなもの」にする

・アルゴリズムはコンピュータ全体のパフォーマンスを重視し「適材適所なもの」に
 する


この2点を念頭に置けば、ライフサイクルの長いアルゴリズムを作成することができるでしょう。

アルゴリズムの具体例は、今後の上級編の中に登場してきますので、ここではアルゴリズムキーポイントを押さえておくにとどめます。

 
 
back top next
   
  Copyright © 2003-2005. Hiroshi Suzuki All Rights Reserved.