[データ構造] データ構造とADT

データ構造

データ構造(データこうぞう、: data structure)は、計算機科学において、データの集まりをコンピュータの中で効果的に扱うため、一定の形式に系統立てて格納するときの形式のことである。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

適切なデータ構造を選ぶことで、アルゴリズムを高速化することができます。

例えば、グラフで最短経路を求める ダイクストラ法 は、オリジナルの計算量は\(O (n^2) \) ですが、優先度付きキュー を用いることで\( O (N \times \log N) \) の計算量になります。

抽象データ型 Abstract Data Type

抽象データ型(ちゅうしょうデータがた、: abstract data type、ADT)とは、データ構造とそれを直接操作する手続きをまとめてデータ型の定義とすることでデータ抽象[1]を実現する手法またはそのひとまとまりとして定義されたデータ型を言う。通常のデータ型であれば変数宣言で変数に束縛されるものは値であるが、抽象データ型の世界において値に相当するものはデータ構造とその操作[2]のまとまり[3]である。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

ADT 抽象データ型とは、具体的なデータ構造のモデルのようなもので、 そのADT が持つ操作の集合とその計算量により定義されています。

例えば、ADTの例として、スタックを挙げることができます。

抽象データ型としてのスタックは、ノード(何らかのデータを持ち、別のノードを指し示すことができる構造)のコンテナ(データを集めて格納する抽象データ型の総称)であり、2つの基本操作プッシュ(push)とポップ(pop)を持つ。Pushは指定されたノードをスタックの先頭(トップ)に追加し、既存のノードはその下にそのまま置いておく。Popはスタックの現在のトップのノードを外してそれを返す。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

ADTとしてのスタックは、Push と Pop という操作を持ち、それぞれの計算量は\( O (1)\)です。

「 操作の集合とその計算量」により定義された抽象データ型を、具体的に実装すると、データ構造になります。

「スタック」という言葉の場合は、「ADT」としての意味と、「データ構造」としての意味のどちらも「スタック」という言葉で表されます。

配列 複数の要素(値)の集合を格納・管理するのに用いられるデータ構造が配列である。数学のベクトルおよび行列に近い概念であり、実際にベクトルおよび行列をプログラム上で表現する場合に配列が使われることが多い。同様に複数要素の集合を管理するデータ構造(コレ...