現在、抽象データ型 (ADT) について勉強していますが、概念がまったくわかりません。誰かがこれが実際に何であるかを説明してもらえますか? また、コレクション、バッグ、リスト ADT とは何ですか? 簡単な言葉で?
20 に答える
抽象データ型 (ADT) は、動作のみが定義され実装は定義されていないデータ型です。
ADT の反対は Concrete Data Type (CDT) で、ADT の実装が含まれています。
例:
Array, List, Map, Queue, Set, Stack, Table, Tree, and Vector
ADT です。これらの各 ADT には、CDT などの多くの実装があります。コンテナーは、すべての ADT の上にある高レベルの ADT です。
実際の例:
book は Abstract (Telephone Book は実装)
Abstact データ型のウィキペディアの記事には、多くのことが書かれています。
コンピューター サイエンスでは、抽象データ型 (ADT) は、同様の動作を持つ特定のクラスのデータ構造の数学モデルです。または、同様のセマンティクスを持つ 1 つ以上のプログラミング言語の特定のデータ型の場合。抽象データ型は間接的に定義され、それに対して実行される可能性のある操作と、それらの操作の効果 (および場合によってはコスト) に対する数学的制約によってのみ定義されます。
もう少し具体的に言えば、Java のList
インターフェースを例に挙げることができます。具体的なクラスがないため、インターフェイスは明示的に動作をまったく定義しませんList
。インターフェイスは、他のクラス (ArrayList
および などLinkedList
) が と見なされるために実装する必要がある一連のメソッドのみを定義しますList
。
コレクションは、もう1つの抽象データ型です。Java のCollection
インターフェースの場合、 よりもさらに抽象的ですList
。
インターフェイスは、、、、、およびメソッドのコントラクトに、インターフェイスで指定されたもの以外の
List
追加の規定を配置します。Collection
iterator
add
remove
equals
hashCode
バッグはマルチセットとも呼ばれます。
数学では、マルチセット (またはバッグ) の概念は、メンバーが複数回出現することが許可されているセットの概念を一般化したものです。たとえば、要素 a と b を含み、他を含まない一意のセットがありますが、a の 2 つのコピーと b の 1 つを含むマルチセットや、の 3 つのコピーを含むマルチセットなど、このプロパティを持つマルチセットが多数あります。 AもBも。
Java では、Bag は非常に単純なインターフェイスを実装するコレクションになります。アイテムをバッグに追加し、そのサイズを確認し、そこに含まれるアイテムを反復処理できることだけが必要です。実装例については、 Bag.javaを参照してください(Sedgewick & Wayne's Algorithms 4th editionから)。
Abstract データ型は、さまざまな演算を含むデータを含む数学モジュールです。実装の詳細は隠されているため、抽象的と呼ばれます。抽象化により、データとアクションの論理プロパティに焦点を当てることで、タスクの複雑さを整理することができました。
ADT は、特定の実装から正確に独立した一連のデータ値と関連操作です。ADT の強みは、実装がユーザーから隠されていることです。インターフェイスのみが宣言されています。これは、ADT がさまざまな方法で使用できることを意味します。
抽象データ型を定義する前に、システム定義のデータ型の別の見方を考えてみましょう。デフォルトでは、すべてのプリミティブ データ型 (int、float など) が加算や減算などの基本演算をサポートしていることは誰もが知っています。システムは、プリミティブ データ型の実装を提供します。ユーザー定義のデータ型の場合、操作も定義する必要があります。これらの操作の実装は、実際に使用したいときに行うことができます。つまり、一般に、ユーザー定義のデータ型はその操作とともに定義されます。
問題を解決するプロセスを簡素化するために、データ構造とその操作を組み合わせ、これを「抽象データ型」と呼びます。(ADT)。
一般的に使用されるADTには、リンク リスト、スタック、キュー、バイナリ ツリー、ディクショナリ、ディスジョイント セット (ユニオンと検索)、ハッシュ テーブルなどがあります。
ADTは、次の 2 つのタイプで構成されます。
1. データの宣言。
2. 運用宣言。