web-dev-qa-db-ja.com

ADTとは何ですか? (抽象データ型)

現在、抽象データ型(ADT)について勉強していますが、この概念はまったくわかりません。誰かがこれが実際に何であるかを私に説明してもらえますか?コレクション、バッグ、リストADTとは何ですか?簡単な言葉で?

31
Tommy2014

Abstract Data Type(ADT)は、動作のみが定義され、実装はされないデータ型です。

ADTの反対側には具象データ型(CDT)があり、ADTの実装が含まれています。

例:
Array, List, Map, Queue, Set, Stack, Table, Tree, and VectorはADTです。これらの各ADTには多くの実装、つまりCDTがあります。コンテナは、とりわけADTの高レベルADTです。

実際の例:
bookは抽象的です(電話帳は実装です)

enter image description here

62
Premraj

Abstact data type Wikipediaの記事には多くのことを言うことができます。

コンピューターサイエンスでは、抽象データ型(ADT)は、同様の動作をする特定のクラスのデータ構造の数学モデルです。または、同様のセマンティクスを持つ1つ以上のプログラミング言語の特定のデータ型の場合。抽象データ型は、その上で実行できる操作と、それらの操作の効果(および場合によってはコスト)に対する数学的制約によってのみ間接的に定義されます。

もう少し具体的に言うと、例としてJavaの List インターフェースを使用できます。具体的なListクラスがないため、インターフェイスは動作を明示的に定義しません。このインターフェースは、他のクラス(たとえば ArrayList および LinkedList )がListと見なされるために実装しなければならないメソッドのセットのみを定義します。

collectionは別の抽象データ型です。 Javaの Collection インターフェースの場合、Listよりもさらに抽象的です。

Listインターフェースは、Collectionインターフェースで指定されたものを超えて、iteratoraddremoveequals、およびhashCodeメソッドの規約に追加の規定を置きます。

bagは、 multiset とも呼ばれます。

数学では、マルチセット(またはバッグ)の概念は、メンバーが複数回現れることを許可されるセットの概念の一般化です。たとえば、要素aとbを含み他を含まない一意のセットがありますが、aとbの2つのコピーを含むマルチセットや、3つのコピーを含むマルチセットなど、このプロパティを持つ多くのマルチセットがあります。 AもBも。

Javaでは、Bagは非常に単純なインターフェイスを実装するコレクションになります。必要なのは、バッグにアイテムを追加し、サイズを確認し、バッグに含まれるアイテムを反復処理することだけです。実装例については、 Bag.Java を参照してください(Sedgewick&Wayneの Algorithms 4th edition から)。

15
Bill the Lizard

真の抽象データ型は、その表現または特定の操作にコミットすることなく、そのインスタンスのプロパティを記述します。たとえば、抽象(数学)型のIntegerは、離散的で無制限の線形に順序付けされたインスタンスのセットです。具象型は、インスタンスに特定の表現を提供し、特定の操作セットを実装します。

3
Dee

抽象データ型は、さまざまな操作のデータを含む数学モジュールです。実装の詳細は隠されているため、抽象と呼ばれます。抽象化により、データとアクションの論理プロパティに焦点を当てることにより、タスクの複雑さを整理できます。

1
user7189947

プログラミング言語では、型はデータとそれに関連する操作です。 ADTはユーザー定義のデータ集合体であり、これらのデータに対する操作であり、カプセル化によって特徴付けられ、データと操作は単一の構文単位で表されるか、リストで宣言され、情報の隠蔽、ADTのユーザーには関連する操作のみが表示されます。ADTinterface、プログラミング言語の通常のデータ型と同じ方法です。データの内部表現と操作の実装はADTユーザーには関係ないため、これは抽象化です。

ADTは、特定の実装から完全に独立したデータ値と関連する操作のセットです。 ADTの強さは、実装から隠されていることですuser.onlyインターフェースは宣言されています。これは、ADTがさまざまな方法であることを意味します。

1
purushottam ROY

abstract data typesを定義する前に、システム定義のデータ型の異なるビューについて考えてみましょう。デフォルトでは、すべてのプリミティブデータ型(int、floatなど)が加算や減算などの基本的な操作をサポートしていることは誰もが知っています。システムは、プリミティブデータ型の実装を提供します。ユーザー定義のデータ型の場合、操作も定義する必要があります。これらの操作の実装は、実際に使用したいときに実行できます。つまり、一般に、ユーザー定義のデータ型はその操作とともに定義されます。

問題を解決するプロセスを簡素化するために、データ構造とその操作を組み合わせて、これを"Abstract Data Type"と呼びます。 (ADT)。

一般的に使用されるADT'S include:Linked List、Stacks、Queues、Binary Tree、Dictionaries、Disjoint Sets(Union and find)、Hash Tablesなど。

ADT'sは次の2つのタイプで構成されます。

1。データの宣言。

2。操作の宣言。

1
user9131165

抽象データ型の表記(ADT)

抽象データ型は、操作のコレクションが定義された数学モデルとして定義できます。単純な例は、整数のセットと、そのセットで定義された和集合、交差の操作です。

ADTのはプリミティブデータタイプ(整数、charなど)の一般化であり、タイプとすべての操作の定義という意味でデータタイプをカプセル化します。プログラムの1つのセクションにローカライズされたタイプ。これらは、[〜#〜] adt [〜#〜]とその操作が定義されているセクションの外部のプリミティブデータ型として扱われます。

[〜#〜] adt [〜#〜]の実装は、変数を定義する宣言のプログラミング言語のステートメントへの翻訳です。その[〜#〜] adt [〜#〜]に加えて、その操作ごとにその言語の手順[〜#〜] adt [〜#〜]。 ADTの実装は、[〜#〜] adt [〜#〜]を表すデータ構造を選択します。

データ型の論理プロパティを指定する便利なツールは、抽象データ型です。基本的に、データ型は値のコレクションとそれらの値に対する一連の操作です。そのコレクションとそれらの操作は、特定のハードウェアとソフトウェアのデータ構造を使用して実装できる数学的な構造を形成します。用語 "abstract data type"は、データ型を定義する基本的な数学的概念を指します。

抽象データ型を数学的概念として定義する際、空間や時間の効率性には関心がありません。これらは実装の問題です。実際、[〜#〜] adt [〜#〜]の定義は、実装の詳細にはまったく関係ありません。特定のハードウェア上または特定のソフトウェアを使用して特定の[〜#〜] adt [〜#〜]を実装することさえできない場合がありますシステム。たとえば、[〜#〜] adt [〜#〜]整数が普遍的に実装可能ではないことをすでに見てきました。

[〜#〜] adt [〜#〜]と私の指定方法の概念を説明するために、ADT RATIONALこれは有理数の数学的概念に対応します。有理数とは、2つの整数の商として表現できる数です。定義する有理数の操作は、2つの整数からの有理数の作成、加算、乗算、および等価性のテストです。以下は、この[〜#〜] adt [〜#〜]の初期仕様です。

                  /* Value defination */

abstract typedef <integer, integer> RATIONAL;
condition RATIONAL [1]!=0;

                 /*Operator defination*/

abstract RATIONAL makerational (a,b)
int a,b;
preconditon b!=0;
postcondition makerational [0] =a;
              makerational [1] =b;
abstract RATIONAL add [a,b]
RATIONAL a,b;
postcondition add[1] = = a[1] * b[1]
              add[0] = a[0]*b[1]+b[0]*a[1]
abstract RATIONAL mult [a, b]
RATIONAL a,b;
postcondition mult[0] = = a[0]*b[a]
              mult[1] = = a[1]*b[1]
abstract equal (a,b)
RATIONAL a,b;
postcondition equal = = |a[0] * b[1] = = b[0] * a[1];

[〜#〜] adt [〜#〜]は2つの部分で構成されます:-

1)値の定義

2)操作定義

1)値の定義:-

値定義は、ADTの値のコレクションを定義し、2つの部分で構成されます。

1)定義句

2)条件節

たとえば、[〜#〜] adt [〜#〜]RATIONALの値定義は、RATIONAL値が2つの整数で構成されていることを示しています。そのうち0に等しくないもの。

キーワードabstract typedefは値定義を導入し、キーワード条件は、新しく定義されたデータ型の条件を指定するために使用されます。この定義では、条件は分母が0でないことを指定しています。定義句は必須ですが、条件はすべての[〜#〜] adt [〜#〜]

2)オペレーター定義:-

各演算子は、3つの部分を持つ抽象ジャンクションとして定義されます。

1)Header

2)オプションの前提条件

3)オプションの事後条件

たとえば、ADT RATIONALの演算子定義には、作成(メーカー)、加算(加算)、乗算(乗算)の操作、および等価性のテスト(等しい)が含まれます。最初に乗算の仕様を考えてみましょう。これは最も単純なためです。ヘッダーと事後条件が含まれていますが、事前条件は含まれていません。

abstract RATIONAL mult [a,b]
RATIONAL a,b;
postcondition mult[0] = a[0]*b[0]
              mult[1] = a[1]*b[1]

この定義のヘッダーは最初の2行で、C関数のヘッダーに似ています。キーワードabstractは、それがC関数ではなく、ADT演算子定義であることを示します。

事後条件は、操作の実行内容を指定します。事後条件では、関数の名前(この場合はmult)を使用して、操作の結果を示します。したがって、mult [0]は結果の分子を表し、mult 1 は結果の分母を表します。つまり、操作の実行後にどの条件が真になるかを指定します。この例では、事後条件は、有理乗算の結果の分子が2つの入力の分子の整数積に等しく、分母が2つの分母のth整数積に等しいことを指定します。

リスト

コンピューターサイエンスでは、リストまたはシーケンスは、同じ値が複数回発生する可能性のある、順序付け可能な値の数を表す抽象データ型です。リストのインスタンスは、有限数列の「数学的」概念のコンピューター表現です。リストの(潜在的に)無限の類似体はストリームです。リストは他の値を含むため、コンテナの基本的な例です。同じ値が複数回出現する場合、各出現は個別のアイテムと見なされます

名前リストは、抽象リスト、特にリンクリストを実装するために使用できるいくつかの具体的なデータ構造にも使用されます。

enter image description here

リストの画像

バッグ

バッグはオブジェクトのコレクションであり、バッグにオブジェクトを追加し続けることができますが、バッグに追加したオブジェクトを削除することはできません。したがって、bagデータ構造を使用すると、すべてのオブジェクトを収集し、それらを反復処理できます。 Javaでプログラムを作成する場合、通常はバッグに入れます。

Bag

バッグの画像

コレクション

Javaの意味でのコレクションは、Collectionインターフェースを実装するクラスを指します。一般的な意味でのコレクションは、オブジェクトのグループです。

enter image description here

コレクションの画像

1
coding_ninza

ADTはオブジェクトと操作のセットです。ADTの定義のどこにも、操作のセットの実装方法に関する記述はありません。コレクションを使用するプログラマーは、コレクションの実装の詳細を気にすることなく、事前に決められた方法でデータをインスタンス化してアクセスする方法を知るだけで済みます。つまり、ユーザーの観点からすると、コレクションは抽象化であり、このため、コンピューターサイエンスでは、一部のコレクションは抽象データ型(ADT)と呼ばれます。ユーザーは、そのインターフェース、または実行する一連の操作の学習にのみ関心があります... more

0
Muyide Ibukun

問題を解決するために、データ構造とその操作を組み合わせます。 ADTは2つの部分で構成されます。

  1. データの宣言。
  2. 運用宣言。

一般的に使用されるADTは、リンクリスト、スタック、キュー、優先度キュー、ツリーなどです。ADTを定義する際、実装の詳細について心配する必要はありません。それらは、私たちがそれらを使いたいときにだけ現れます。

0
cammando

単に抽象データ型は、一連の操作と一連のデータを使用して、他のデータをマシンに効率的に保存するために使用されます。特定の型宣言は必要ありません。 ADTの実装が必要です。

0
Ashish Jain

抽象データ型は、値のコレクションであり、これらの値に対するあらゆる種類の操作です。たとえば、Stringはプリミティブデータ型ではないため、抽象データ型に含めることができます。

0
user8369850

単純なWord:抽象データ型は、データとそのデータで動作する操作のコレクションです。操作は、プログラムの残りの部分にデータを記述し、プログラムの残りの部分がデータを変更できるようにします。 「抽象データ型」の「データ」という単語は大まかに使用されます。 ADTは、それに影響するすべての操作、ファイルとファイルの操作、保険料率表とその操作、または他の何かを持つグラフィックウィンドウです。

コード完成2冊から

Abstract data typeはユーザー定義のデータ型に似ており、データ型の内部に何があり、操作がどのように実行されるかを知らなくても関数を実行できます。情報は公開されていないため、抽象化されています。例えば。リスト、配列、スタック、キュー。 Stackでは、Push、Popなどの機能を実行できますが、カーテンの背後でどのように実装されているかはわかりません。

0
Ankit garg