Apa perbedaan antara struktur data abstrak dan konkret?

17

Saya pikir array asosiatif (yaitu peta, atau kamus) dan tabel hashing adalah konsep yang sama, sampai saya melihat di Wikipedia itu

Untuk kamus dengan jumlah binding yang sangat kecil, mungkin masuk akal untuk mengimplementasikan kamus menggunakan daftar asosiasi, daftar binding yang terhubung. ...

Implementasi tujuan umum yang paling sering digunakan dari array asosiatif adalah dengan tabel hash: sebuah array binding, bersama dengan fungsi hash yang memetakan setiap kunci yang mungkin ke dalam indeks array. ...

Kamus juga dapat disimpan dalam pohon pencarian biner atau dalam struktur data yang dikhususkan untuk jenis kunci tertentu seperti pohon radix, percobaan, susunan Judy, atau pohon van Emde Boas. ...

Jadi, saya pikir, masalah saya terletak pada saya tidak tahu bahwa array asosiatif (yaitu peta, atau kamus) adalah tipe data abstrak dan tabel hashing adalah struktur data konkret, dan berbagai struktur data konkret dapat digunakan untuk mengimplementasikan tipe data abstrak yang sama.

Pertanyaan saya akan

  • Apa perbedaan dan hubungan antara struktur data abstrak dan struktur data konkret?

  • Apa contoh untuk masing-masing (struktur data abstrak dan konkret)? Lebih banyak lebih baik.

  • Apakah ada daftar struktur data konkret apa yang dapat digunakan untuk mengimplementasikan struktur data abstrak apa? Akan menyenangkan untuk memilikinya.

StackExchange untuk Semua
sumber

Jawaban:

17

Tipe data abstrak (ADT) pada dasarnya adalah API, dan struktur data konkret menyediakan implementasi API itu. Untuk ADT yang diberikan, seringkali ada beberapa pilihan struktur data konkret yang mendukung operasi permintaan dan pembaruan yang dijelaskan oleh ADT. Setiap struktur data konkret untuk ADT yang diberikan harus mendukung semua operasi yang dijelaskan oleh ADT (mungkin dengan beberapa kemungkinan keberhasilan dalam kasus struktur acak), tetapi setiap struktur konkret dapat membuat jaminan yang berbeda dari waktu berjalan setiap operasi. Pilihan struktur data konkrit mana yang akan diterapkan untuk ADT yang diberikan biasanya tergantung pada prioritas efisiensi setiap operasi (termasuk inisialisasi struktur) dan kompleksitas penerapan dan pemeliharaan berbagai tipe data.

Ada terlalu banyak ADT dan struktur beton yang sesuai untuk dicantumkan dalam satu jawaban, tetapi berikut adalah beberapa contoh:

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

  • Findsuccessor(x)SxtSs<t

  • Sebuah Prioritas Antrian adalah ADT yang memerlukan insertdan delete-minoperasi (dan kadang-kadang operasi lain juga, seperti find-min increase-keyatau delete-key). Struktur data yang menerapkan ADT antrian prioritas meliputi:

    1. daftar tertaut yang tidak disortir, yang memiliki cepat inserttapi lambat delete-min.

    2. daftar tertaut yang diurutkan yang memiliki cepat delete-mintapi lambatinsert

    3. insertdelete-minsHairt(n)

    4. sebuah tumpukan biner yang memiliki logaritma insertdan delete-min, dan linear waktu inisialisasi.

    5. Ada juga varian lain dari implementasi heap .

  • stabbing(x)x

Joe
sumber
9

Tipe data abstrak menjelaskan operasi apa yang tersedia dan hukum apa yang mereka patuhi. Misalnya kamus memungkinkan Anda untuk menyimpan nilai di bawah kunci yang diberikan dan untuk mengambil nilai untuk kunci, dan berjanji bahwa jika Anda menyimpan nilai terlebih dahulu dan kemudian mengambilnya dengan kunci yang sama, Anda akan mendapatkan nilai yang Anda simpan kembali. Tumpukan memiliki operasi push dan pop.

Tipe data konkret mengatakan bagaimana operasi ini sebenarnya dilaksanakan.

Alexey Romanov
sumber
Terima kasih! Apakah ada daftar struktur data umum mana yang abstrak atau konkret?
StackExchange for All
Bukan daftar umum, tetapi Anda mungkin ingin melihat xlinux.nist.gov/dads
Alexey Romanov