Sabtu, 14 Desember 2013

Array asosiatif


Dalam ilmu komputer , array asosiatif, peta, tabel simbol, atau kamus adalah tipe data abstrak terdiri dari (key, value) koleksi dari  pasang, sehingga setiap kunci yang mungkin muncul paling banyak sekali dalam koleksi.

Operasi yang terkait dengan tipe data ini memungkinkan:
- penambahan pasangan untuk koleksi
penghapusan pasang dari koleksi
modifikasi nilai-nilai yang ada pasang
ookup dari nilai yang terkait dengan kunci tertentu

Kamus masalah adalah tugas merancang sebuah struktur data yang mengimplementasikan array asosiatif. Sebuah solusi standar untuk masalah kamus adalah tabel hash , dalam beberapa kasus juga memungkinkan untuk memecahkan masalah dengan menggunakan langsung ditujukan array , pohon pencarian biner, atau struktur yang lebih khusus lainnya.


Banyak bahasa pemrograman termasuk array asosiatif sebagai tipe data primitif , dan mereka tersedia dalam perpustakaan software bagi banyak orang lain. Content-addressable memori merupakan bentuk dukungan hardware-tingkat langsung untuk array asosiatif. Array asosiatif memiliki banyak aplikasi termasuk seperti dasar pola pemrograman sebagai memoization dan pola dekorator .

Operasi
Dalam array asosiatif, hubungan antara kunci dan nilai sering dikenal sebagai "mengikat", dan kata yang sama "mengikat" dapat juga digunakan untuk merujuk kepada proses menciptakan hubungan baru.
Operasi yang biasanya ditetapkan untuk array asosiatif adalah:
- Menambah atau menyisipkan Tambahkan baru (key, value) pasangan untuk koleksi, mengikat kunci baru untuk nilai baru. Argumen untuk operasi ini adalah kunci dan nilai.
Tugaskan: ganti nilai di salah satu (key, value) pasangan yang sudah dalam koleksi, mengikat kunci lama ke nilai baru. Seperti dengan penyisipan, argumen untuk operasi ini adalah kunci dan nilai.
Hapus atau menghapus: menghapus (key, value) pasangan dari koleksi, tidak mengikat kunci yang diberikan dari nilainya. Argumen untuk operasi ini adalah kuncinya.
Lookup: menemukan nilai (jika ada) yang terikat dengan kunci yang diberikan. Argumen untuk operasi ini adalah kuncinya, dan nilai yang kembali dari operasi. Jika tidak ada nilai ditemukan, beberapa implementasi array asosiatif menaikkan pengecualian .

Selain itu, array asosiatif juga dapat mencakup operasi lain seperti menentukan jumlah binding atau membangun sebuah iterator loop atas semua binding. Biasanya, untuk operasi semacam itu, urutan binding dikembalikan mungkin sewenang-wenang.

Sebuah multimap menggeneralisasi array asosiatif dengan memungkinkan beberapa nilai untuk dihubungkan dengan satu tombol. Sebuah peta dua arah adalah tipe data abstrak terkait di mana binding beroperasi di kedua arah: setiap nilai harus terkait dengan kunci yang unik, dan operasi pencarian kedua mengambil nilai sebagai argumen dan mendongak kunci yang terkait dengan nilai tersebut.

Implementasi
Untuk kamus dengan jumlah yang sangat kecil dari binding, mungkin masuk akal untuk menerapkan kamus menggunakan daftar asosiasi , sebuah linked list binding. Dengan implementasi ini, waktu untuk melakukan operasi kamus dasar adalah linier dalam jumlah binding, namun mudah untuk menerapkan dan faktor-faktor konstan dalam waktu yang berjalan kecil.

Teknik pelaksanaan lain yang sangat sederhana, dapat digunakan ketika tombol dibatasi untuk kisaran sempit bilangan bulat, adalah langsung menangani ke dalam sebuah array: nilai untuk k kunci yang diberikan disimpan di array sel A, atau jika tidak ada yang mengikat untuk k maka sel menyimpan khusus nilai sentinel yang menunjukkan tidak adanya mengikat. Serta menjadi sederhana, teknik ini cepat: setiap operasi kamus membutuhkan waktu konstan. Namun, kebutuhan ruang untuk struktur ini adalah ukuran seluruh ruang kunci, sehingga tidak praktis kecuali keyspace kecil.

Yang paling sering digunakan pelaksanaan tujuan umum dari array asosiatif adalah dengan tabel hash : sebuah array yang binding, bersama-sama dengan fungsi hash yang memetakan setiap tombol mungkin ke indeks array. Ide dasar dari tabel hash adalah bahwa mengikat untuk diberikan kunci disimpan di posisi yang diberikan dengan menerapkan fungsi hash untuk kunci itu, dan bahwa operasi pencarian dilakukan dengan melihat bahwa sel array dan menggunakan mengikat ditemukan di sana . Namun, kamus berbasis tabel hash harus siap untuk menangani tabrakan yang terjadi ketika dua tombol dipetakan oleh fungsi hash untuk indeks yang sama, dan banyak strategi resolusi tabrakan yang berbeda telah dikembangkan untuk menangani situasi ini, sering didasarkan baik pada menangani terbuka ( melihat urutan indeks tabel hash bukan indeks tunggal, sampai menemukan salah satu kunci yang diberikan atau sel kosong) atau hash chaining (menyimpan daftar asosiasi kecil bukannya mengikat tunggal dalam setiap sel tabel hash).

Kamus juga dapat disimpan dalam pohon pencarian biner atau dalam struktur data khusus untuk jenis tertentu kunci seperti pohon radix , mencoba , Judy array , atau pohon van Emde Boas , namun metode pelaksanaan ini kurang efisien daripada tabel hash serta menempatkan pembatasan lebih besar pada jenis data yang mereka dapat menangani. Keuntungan dari struktur alternatif berasal dari kemampuan mereka untuk menangani operasi di luar yang dasar dari array asosiatif, seperti menemukan mengikat yang utama adalah yang paling dekat dengan kunci tanya, bila permintaan tidak sendiri hadir di set binding.

Dukungan bahasa
Array asosiatif dapat diimplementasikan dalam bahasa pemrograman sebagai sebuah paket dan banyak sistem bahasa menyediakan mereka sebagai bagian dari perpustakaan standar mereka. Dalam beberapa bahasa, mereka tidak hanya dibangun ke dalam sistem standar, namun memiliki sintaks khusus, yang sering menggunakan array seperti subscripting.

Built-in mendukung sintaksis untuk array asosiatif diperkenalkan oleh SNOBOL 4, di bawah "meja" nama. gondok membuat array asosiatif multi-dimensi, opsional gigih, struktur data kunci. SETL mendukung mereka sebagai salah satu kemungkinan pelaksanaan set dan peta. Kebanyakan bahasa scripting modern, dimulai dengan AWK dan termasuk Perl , Tcl , JavaScript , Python , Ruby , dan Lua , mendukung array asosiatif sebagai jenis wadah primer. Dalam banyak bahasa, mereka yang tersedia sebagai fungsi perpustakaan tanpa sintaks khusus.

Di Smalltalk , Objective-C , . NET , [7] Python , dan REALbasic mereka disebut kamus, dalam Perl dan Ruby mereka disebut hash, dalam C + + , Java , Go , Clojure , Scala , OCaml , Haskell mereka disebut peta ( lihat peta (C + +) , unordered_map (C + +) , dan Map ), dalam Common Lisp dan Windows PowerShell , mereka disebut tabel hash (karena keduanya biasanya menggunakan implementasi ini). Dalam PHP , semua array dapat asosiatif, kecuali bahwa tombol yang terbatas pada bilangan bulat dan string. Dalam JavaScript (lihat juga JSON ), semua benda berperilaku sebagai array asosiatif. Di Lua, mereka disebut meja, dan digunakan sebagai blok bangunan primitif untuk semua struktur data. Dalam Visual FoxPro , mereka disebut Collections.

Tidak ada komentar:

Posting Komentar