抽象データ構造と具象データ構造の違いは何ですか?


17

私は中Iソーまで、連想配列(すなわちマップ、または辞書)とハッシュテーブルは同じ概念だと思っていたウィキペディアこと

バインディングの数が非常に少ないディクショナリの場合、バインディングのリンクリストであるアソシエーションリストを使用してディクショナリを実装することは理にかなっています。...

連想配列の最も頻繁に使用される汎用実装は、ハッシュテーブルを使用したものです。バインディングの配列と、考えられる各キーを配列インデックスにマッピングするハッシュ関数を使用します。...

辞書は、バイナリ検索ツリー、または基数ツリー、試行、Judy配列、van Emde Boasツリーなどの特定のタイプのキーに特化したデータ構造に格納することもできます。...

だから、私の問題は、連想配列(マップや辞書など)が抽象データ型であり、ハッシュテーブルが具体的なデータ構造であり、異なる具体的なデータ構造を使用して実装できることを知らないことだと思う同じ抽象データ型。

私の質問は

  • 抽象データ構造と具体的なデータ構造の違いと関係は何ですか?

  • それぞれの例(抽象および具体的なデータ構造)は何ですか?より良い。

  • どのような抽象データ構造を実装するためにどの具体的なデータ構造を使用できるかというリストはありますか?持っているといいでしょう。

回答:


17

抽象データ型(ADT)は基本的にAPIであり、具体的なデータ構造はそのAPIの実装を提供します。特定のADTについて、ADTで記述されたクエリおよび更新操作をサポートする具体的なデータ構造のいくつかの異なる選択肢がしばしばあります。特定のADTのすべての具体的なデータ構造は、ADTで記述されたすべての操作をサポートする必要があります(ランダム化された構造の場合は成功する可能性があります)が、各具体的な構造は各操作の実行時間について異なる保証を行う場合があります。特定のADTに実装する具体的なデータ構造の選択は、通常、各操作の効率の優先順位(構造の初期化を含む)と、さまざまなデータ型の実装と保守の複雑さに依存します。

ADTと対応する具体的な構造が多すぎて1つの回答にリストすることはできませんが、いくつか例を示します。

  • Find(x)xxInsert(x)Delete(x)

  • Findsuccessor(x)SxtSs<t

  • プライオリティキューが必要ADTであるinsertdelete-min操作(時には他の操作も、などfind-min increase-key又はdelete-key)。優先キューADTを実装するデータ構造には、次のものが含まれます。

    1. ファストありソートされていないリンクリスト、insertしかし遅いですdelete-min

    2. 高速であるdelete-minが遅いソート済みリンクリストinsert

    3. insertdelete-minsort(n)

    4. バイナリヒープ対数有しinsertdelete-min、および線形時間の初期化。

    5. また、ヒープ実装の他のバリアントもあります

  • stabbing(x)x


9

抽象データ型は、利用可能操作と、従う法律を記述します。たとえば、ディクショナリを使用すると、特定のキーの下に値を保存し、キーの値を取得できます。最初に値を保存してから同じキーで取得すると、保存した値を取得することを約束します。スタックにはプッシュ操作とポップ操作があります。

具体的なデータ型はこれらの操作が実際に実装される方法を示します。


ありがとう!どの共通データ構造が抽象的か具体的かを示すリストはありますか?
ティム

一般的なリストではありませんが、xlinux.nist.gov / dadsをご覧になる
Alexey Romanov
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.