第51回
アルゴリズムの基礎・1~カードを使って整列(ソート)を実感しよう

アルゴリズムが大切なワケ

アルゴリズムなど学んでいなくても、プログラムを作ることは可能です。多くの処理は既存のパターンを組み合わせて実現できます。しかし、それが通用しなくなる局面も確実にあります。

アルゴリズムは難しい?!

アルゴリズムが「算法」と訳されることを、ご存じの方は多いと思います。この場合の「法」が「方法・手順」を意味することはお分かりでしょう。そして「算」は「計算・演算」ということになるのですが、コンピュータに命令を与えて物事を処理させる――というプログラミングの場合、単純に数値の計算を示すのではなく、「コンピュータに実行させる処理」を表します。

よってアルゴリズムとは、「処理の手順」という実に単純な意味になります。

アルゴリズムと聞けば、数値を並べ替えたり、合致する値を検索したりするための非常に基礎的で原初的なプログラムの構造を思い浮かべます。

アルゴリズムを解説する書籍では、何やら難しい数式が出てきたりして、普段我々が書いているプログラムのソースコードとはちょっと趣の異なるイメージがあります。

在庫管理にアルゴリズムは役立つのか?!

実際、数値の並べ替えや検索のための手法を知っていることが、例えば在庫管理システムの設計やプログラミングに役立つでしょうか? データベースの表(テーブル)に記録された商品のデータを在庫数の少ない順に並べ替えたり、商品IDをキーにして特定の商品を抜き出したりする処理を作るときに、こういったアルゴリズムの理屈が必要でしょうか?

むしろ、整列や検索(抽出)のためのSQL文を学ぶ方が現実的な気がします。現在のプログラミングでは、データベースもファイルもすべてオブジェクトであり、そのオブジェクトを扱うコンポーネントを組み合わせることで、目的を達成できるようになっています。

ならば、原初的なアルゴリズムを学ぶことなど、ブルーレイ・レコーダーでテレビ番組を予約するために、レコーダーやデジタル放送の仕組みを原理から学ぶような、実用的でないことのように思えてきます。

パターンを踏まえればOKだろうか?!

しかし、決してそういう訳ではありません。「原理」を知っているかどうかということではなく、「原理」を理解するのと同じ理屈で実用面での運用方法を理解することが大切なのです。

並べ替えや検索のソースコードを覚えることは、重要ではありません。そのための手順を考えることが、直面した問題を解決する――これまでに設計したことのない処理を実現する――際の糧(かて)となります。

実際には、ほとんどの実用的なプログラムが、一定のパターンを踏まえれば出来上がってしまうものです。もちろんそれは、コンポーネントなど既に用意された仕掛けのお陰でもあります。求められる多くの処理は、いくつかの機能の組み合わせであり、プログラミングのプロセスの多くが、その組み合わせを考える定型的な作業となっています。

未知との遭遇で悩む

しかし、というか、だからこそ、これまでに経験したことのない――つまり、従来のパターンから逸脱するような――特殊な処理に遭遇したとき、途端に思考回路が停止してしまったりします。

そんなときに役立つのは、対象となる処理を整理し、単純化して共通項や原則を見出すための思考です。

アルゴリズムのお勉強と言えば、なんだか難しい理屈に辟易してしまうようなイメージがあります。しかし、パズルを解くための練習のようなものだと思えば、少しは楽しくなってくるでしょう。

頭の体操をするつもりで、アルゴリズムを楽しんでしまいましょう。