アルゴリズムとデータ構造

アルゴリズムとデータ構造とは

現在、日常生活のあらゆる場面で、コンピュータを見かけます。パソコンやスマートフォン、ゲーム機などのようなものはもちろんのこと、自動車や家電製品、さらには駅の自動改札や信号機の制御など、ありとあらゆるところでコンピュータは使われています。

これらコンピュータは、ソフトウェアによって制御されています。そのソフトは、コンピュータのプログラムと呼ばれるもので構成されています。そのプログラムを動作させるのに必要となるのが、「アルゴリズムとデータ構造」という考え方なのです。アルゴリズムとデータ構造というと、なにかとても難しい話のように聞こえます。しかし概念は、決して難しいものではありません。

プログラムのレシピ

たとえば、あなたがカレーを作るとします。そのとき参考にするのが、レシピですが、レシピとは、大きく分けて、「使用する材料の名前とその量」と、「材料を加工して調理する手順」からなっています。カレーの場合、肉やジャガイモ、玉ねぎやカレー粉などといった材料を用意し、それらを切ったり、加熱したりすることによって料理を完成させます。

コンピュータの世界において、「材料の名前とその量」が、「データ」と呼ばれ、「調理の手順」が「アルゴリズム」に該当します。コンピュータのプログラムもまた、与えられたデータを基に、何らかの処理を行うという意味では、料理と非常に似ています。

つまり、コンピュータの世界におけるアルゴリズムとデータ構造というのは、いわば、プログラミングの「レシピ」に相当するものなのです。つまり、アルゴリズムとデータ構造とは、プログラムにおける車の両輪のようなもので、互いに切っても切り離せないものなのです。(図1-1.)

図1-1.アルゴリズムとデータ構造の考え方
アルゴリズムとデータ構造の考え方

アルゴリズム

アルゴリズムとは

手始めに、まずはアルゴリズムというもには何かということから説明していきましょう。すでに述べたとおり、アルゴリズムとは、料理の手順のようなものです。仮にカレーを作ろうと思っても、そのレシピがわからなければ、作ることができません。それと同じように、プログラムもまた、アルゴリズムがわからなければ作ることはできません。

とはいえ、こういったアルゴリズムを自分で考え出すということは、非常に難しいものです。しかし、幸いなことに、コンピュータが世に出てから今に至るまでの研究者や技術者たちによって、非常に多くのアルゴリズムが作成されてきました。このような先人の知恵の蓄積により、現在では、これらを組み合わせれば、どんなプログラムでもだいたい作れるようになっています。

問題解決方法としてのアルゴリズム

また、別の言い方をすれば、アルゴリズムとは、問題解決の手段であると言えます。私たちが数学の問題を解くように、コンピュータのプログラムも、様々な手段で解決することができます。その際、たった一つのアルゴリズムだけで問題が解けることは稀です。現実には、複数のアルゴリズムを組み合わせたり、一部を改良したりしながら使用して、問題解決を行っていきます。(図1-2.)

図1-2.アルゴリズム
アルゴリズム

こういった考え方は、将棋や囲碁の定石という考え方にも似ています。この定石を知っていれば、対局時のそれぞれの局面において、最善手を繰り出せます。それと同じで、プログラマーはアルゴリズムを多く知っていれば、より多くの問題をスムーズに解決することが可能になるのです。言い方を変えれば、良いプログラマーになるためには、アルゴリズムの学習が不可欠なのです。

データ構造

データ構造とは

では、データ構造とは一体なんでしょう?料理のレシピにおける、材料の種類とその量が「データ」にあたる、ということはすでに説明したとおりです。では、「データ構造」とはなんでしょう?先に結論を言うと、データ構造とは、大量のデータを効率よく管理する仕組みのことを言います。料理の例でいうのなら、コース料理を作る場合、その料理は、「肉料理」、「魚料理」、「デザート」などといった、カテゴリーごとに分割したり、系統立てたりします。このように、必要な処理において、データに構造を与え、処理をしやすくするという考え方がデータ構造なのです。

データ構造の例

より具体的な例を挙げると、学校における、学生管理システムを作成する場合を考えてみましょう。通常、学校には非常に多くの生徒がいますが、それらを「佐藤隆」や「山田花子」などといった、名前だけで管理するのは大変です。そこで、学校は、各生徒に学籍番号や、学年、クラスなどといった、学生を特定するための様々なデータを付随されます。つまり、一つの学生を管理するためのデータ構造として、学籍番号・学年・組・名前というデータがひとまとまりになるデータ構造が有効だというわけです。(図1-3.)

図1-3.データ構造
データ構造

また、住所などの管理方法もそうです。郵便番号は、「地図上のある場所」を効率的に管理するための7ケタの数値ですが、最初の1桁が都道府県を、2桁目から3桁目で市町村、最後の下4桁で地域を限定するといった構造になっています。(図1-4.)これなども、立派なデータ構造であると言えます。このように、日常生活の中では、データ構造は非常によく使われているものなのです。

図1-4.郵便番号の構造
郵便番号の構造