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

現在,諸君はC言語の文法の勉強をしている.実際プログラムの勉強は,文法の勉強だけ では全く不十分である.そのため,この講義では文法の学習が済むと,「アルゴリズムと データ構造」の学習を進める.アルゴリズムとは問題を解く手順のことである.コンピュー タープログラムでは,入力データから目的のデータを作成する手順を言う.プログラマー はアルゴリズムを考え,それをプログラミング言語で表現しなくてはならない.アルゴリ ズムが大事であることは,万人が認めるところである.これは,コンピュータープログラム のみならず,数学や電気の問題を解く場合も同じである.科学の問題を解く場合は手 順が重要で,それが分かれば,問題が解けたのも同様である.

一方,データ構造となると,少し様子が異なってくる.数学や電気の問題のデータ構造と なると,想像がつかない.科学の問題では,データ構造は重要視されないので,それも仕 方ないことである.データ構造を気にするのは,なんと言ってもビジネスの分野である. たとえば,私の場合,成績処理のデータ構造を考えなくてはならない.それには,年度と 学年,学籍番号,学生氏名,教科名,試験名,点数,レポート提出状況,出欠などのデー タを分かり易くまとめなくてはならない.実際には図1に示すExcelの表 を使っている.これがデータ構造である.この例のように,データのまとめ方を データ構造という.

図 1: 成績のExcelファイル.
\includegraphics[keepaspectratio, scale=0.8]{figure/seiseki.eps}

プログラムを作成する場合,そのアルゴリズムとデータ構造を考えなくてはならない.プ ログラムの性能は,アルゴリズムの善し悪しでが決まる--ことはすぐに理解できる.し かし,データ構造については,無頓着になってしまいがちである.先の成績処理のよ うに単純な問題であれば,誰でも同じようなデータ構造を考え,大した問題は生じない.し かし,複雑なデータの場合には,いろいろなデータ構造が考えられる.大企業 の顧客データなどがそれに当たる.住所や氏名,年齢,何時,どこで,購入した商品のデー タがある.これらに加えて,アンケートに答えていれば,それこそ数十の項目で,数百万 人分のデータがあることも容易に想像できる.このデータをまとめ方,すなわち構造は重 要で,その後の処理の方法にも大きく影響する.データ構造に従ったイメージが プログラマーの頭の中にインプットされる.そのため,アルゴリズムも大体決まってしま うのである.データ構造が処理のアルゴリズムを決めてしまうことがあるのだ!

データ構造が悪いと,効率の悪いプログラムになってしまう.たとえば,ファイル に100個の整数が書かれており,その合計を求めるプログラムでは配列を使うべきであろ う.変数を使ったプログラムでは,効率が悪くなるのはすぐに分かるであろう.



ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成19年4月10日


no counter