Saya tahu peta adalah struktur data yang memetakan kunci nilai. Bukankah kamus itu sama? Apa perbedaan antara peta dan kamus 1 ?
1. Saya tidak bertanya bagaimana mereka didefinisikan dalam bahasa X atau Y (yang tampaknya menjadi apa yang umumnya orang tanyakan di sini pada SO), saya ingin tahu apa perbedaan mereka dalam teori.
dictionary
data-structures
language-agnostic
key-value
melahap elysium
sumber
sumber
Jawaban:
Dua istilah untuk hal yang sama:
"Peta" adalah istilah matematika yang benar, tetapi dihindari karena memiliki arti yang terpisah dalam pemrograman fungsional .
Beberapa bahasa masih menggunakan istilah lain ("Objek" dalam Javascript, "Hash" di Ruby, "Tabel" di Lua) , tetapi semua itu memiliki arti yang terpisah dalam pemrograman juga, jadi saya akan menghindarinya.
Lihat di sini untuk info lebih lanjut.
sumber
Dictionary
di Jawa sudah usang. Ini adalah kelas abstrak, digunakan sebelumMap
antarmuka dibuat.Satu adalah istilah yang lebih tua untuk yang lain. Biasanya istilah "kamus" digunakan sebelum istilah matematika "peta" mulai berlaku. Juga, kamus cenderung memiliki tipe kunci string, tetapi itu tidak 100% benar di mana-mana.
sumber
2 sen saya.
Kamus adalah kelas abstrak di Jawa sedangkan Peta adalah antarmuka. Karena, Java tidak mendukung banyak pewarisan, jika suatu kelas memperluas Kamus, itu tidak dapat memperluas kelas lain.
Oleh karena itu, antarmuka Peta diperkenalkan.
Kelas kamus sudah usang dan penggunaan Peta lebih disukai.
sumber
Menjawab pertanyaan ini rumit oleh programmer yang telah melihat istilah yang diberikan makna yang lebih spesifik dalam bahasa atau sistem tertentu yang mereka gunakan, tetapi pertanyaannya meminta perbandingan agnostik bahasa "dalam teori", yang saya maksudkan dalam istilah Ilmu Komputer. .
Terminologi itu dijelaskan
Daftar Ilmu Komputer Universitas Oxford daftar:
Computing Ilmu gagasan peta meskipun didasarkan pada jangka linguistik matematika pemetaan , yang Oxford Dictionary mendefinisikan sebagai:
Kamus dan peta dikontraskan
Jadi, menggunakan terminologi Comp Sci yang ketat di atas, kamus hanyalah peta jika antarmuka terjadi untuk mendukung operasi tambahan yang tidak diperlukan dari setiap kamus:
kemampuan untuk menyimpan elemen dengan kunci dan nilai yang berbeda komponen
kemampuan untuk mengambil nilai yang diberikan hanya kunci
Twist twist:
Berkomunikasi dengan jelas kepada audiens Anda
⚠ Terlepas dari semua hal di atas, jika Anda menggunakan kamus dalam arti Computing Science yang dijelaskan di atas, jangan berharap audiens akan mengikuti Anda pada awalnya, atau terkesan saat Anda berbagi dan mempertahankan terminologi. Jawaban lain untuk pertanyaan ini (dan upvote mereka) menunjukkan seberapa besar kemungkinan "kamus" akan identik dengan "peta" dalam pengalaman sebagian besar programmer. Cobalah untuk memilih terminologi yang akan lebih luas dan jelas dipahami: misalnya
Terminologi Cross Screferencing Comp Sains dengan implementasi spesifik
C ++ Perpustakaan Standar
map
,multimap
,unordered_map
,unordered_multimap
set
,multiset
,unordered_set
,unordered_multiset
std::find
Anda dapat menghapus elemen dan tes untuk keanggotaan dalamarray
,vector
,list
,deque
dll, tapi antarmuka kontainer tidak langsung mendukung itu karena menemukan unsur spektakuler tidak efisien di O (N), dalam beberapa kasus insert / menghapus yaitu tidak efisien, dan mendukung operasi-operasi itu merusak API yang sengaja dibatasi oleh wadah - misalnyadeque
s hanya mendukung penghapusan / pop di bagian depan dan belakang dan tidak dalam hal kunci. Harus melakukan lebih banyak pekerjaan dalam kode untuk mengatur pencarian dengan lembut mendorong programmer untuk beralih ke struktur data kontainer dengan pencarian yang lebih efisien.... dapat menambahkan bahasa lain nanti / silakan mengedit di ...
sumber
Biasanya saya berasumsi bahwa peta didukung oleh tabel hash; itu berkonotasi dengan toko yang tidak diurusi Kamus berkonotasi toko yang dipesan.
Ada kamus berbasis pohon yang disebut Trie .
Dalam Lisp, akan terlihat seperti ini:
Yang merangkum kata-kata:
Traversal dari atas ke daun menghasilkan kata.
sumber
Dictionary
di .Net tidak tertata.std::map
memerintahkan implementasi itu tidak ditentukan dalam standar,std::unordered_map
diperkenalkan pada c ++ 11, diterapkan melalui hashstd::map
", coba gunakan hal lain. Pohon AVL tidak akan berfungsi; biaya pemasangannya tidak memenuhi standar. Hash tidak akan berfungsi; hash tidak teratur dan karenanya tidak memenuhi standar. Standar ini cukup banyak mengatakan "Anda harus menggunakan pohon merah-hitam untuk mengimplementasikanstd::map
" tanpa mengatakannya secara eksplisit.Bukan hal yang sama. Peta adalah bagian dari kamus. Kamus didefinisikan di sini sebagai memiliki fungsi menyisipkan, menghapus, dan menemukan. Peta seperti yang digunakan oleh Java (menurut ini ) adalah kamus dengan persyaratan pemetaan kunci ke nilai dipetakan secara ketat sebagai fungsi satu-ke-satu. Kamus mungkin memiliki lebih dari satu peta kunci untuk satu nilai, atau satu peta kunci untuk beberapa nilai (seperti rantai di hasthtable), misalnya pencarian tagar Twitter.
Sebagai contoh yang lebih "dunia nyata", mencari kata dalam kamus dapat memberi kita sejumlah definisi untuk kata yang sama, dan ketika kita menemukan entri yang mengarahkan kita ke entri lain (lihat kata lain), sejumlah kata untuk daftar definisi yang sama. Di dunia nyata, peta jauh lebih luas, memungkinkan kita untuk memiliki lokasi untuk nama atau nama untuk koordinat, tetapi juga kita dapat menemukan tetangga terdekat atau atribut lainnya (populasi, dll), jadi IMHO mungkin ada argumen untuk perluasan yang lebih besar dari tipe peta mungkin memiliki implementasi berbasis grafik, tetapi akan lebih baik untuk selalu mengasumsikan hanya pasangan nilai kunci, terutama karena tetangga terdekat dan atribut lainnya terhadap nilai semua bisa hanya anggota data dari nilai tersebut.
Peta java, terlepas dari persyaratan satu-ke-satu, dapat mengimplementasikan sesuatu yang lebih seperti kamus umum jika nilainya digeneralisasikan sebagai koleksi itu sendiri, atau jika nilainya hanyalah referensi ke koleksi yang disimpan di tempat lain.
Ingatlah bahwa pengelola Java bukan pengelola definisi ADT, dan bahwa keputusan Java khusus untuk Java.
sumber
Istilah lain untuk konsep ini yang cukup umum: array asosiatif dan hash.
sumber
Ya, mereka sama, Anda dapat menambahkan "Array Asosiatif" ke dalam campuran.
menggunakan
Hashtable
atauHash
ofter mengacu pada implementasi.sumber
begitu juga pada level teoretis semata.
Kamus adalah nilai yang dapat digunakan untuk menemukan Nilai Tertaut. Peta adalah Nilai yang memberikan instruksi tentang cara menemukan nilai lain
semua koleksi yang memungkinkan akses non linear (yaitu hanya mendapatkan yang pertama atau yang terakhir) adalah Peta, karena Array sederhana pun memiliki indeks yang memetakan ke nilai yang benar. Jadi, sementara Kamus adalah Jenis peta, peta memiliki cakupan fungsi yang jauh lebih luas.
Dalam Praktek biasanya fungsi pemetaan yang menentukan nama, sehingga HashMap adalah struktur data yang dipetakan yang menggunakan algoritma hashing untuk menautkan kunci ke nilai, sedangkan sebagai Kamus tidak menentukan bagaimana kunci terkait dengan nilai. jadi bisa disimpan melalui daftar yang ditautkan, pohon atau algoritma lainnya. dari akhir penggunaan Anda biasanya tidak peduli apa algoritma itu hanya bekerja sehingga Anda menggunakan kamus umum dan hanya bergeser ke salah satu struktur lain hanya ketika Anda perlu memeriksa jenis algoritma
sumber
Ini adalah dua istilah berbeda untuk konsep yang sama.
Hashtable
danHashMap
juga merujuk pada konsep yang sama.sumber
Perbedaan utama adalah bahwa Peta , mengharuskan semua entri (nilai & pasangan kunci) memiliki kunci unik. Jika tabrakan terjadi, yaitu ketika entri baru memiliki kunci yang sama dengan entri yang sudah ada dalam koleksi, maka diperlukan penanganan tabrakan.
Biasanya, kami menangani tabrakan menggunakan Chaining Terpisah . Atau Probing Linear .
Sebuah kamus memungkinkan untuk beberapa entri untuk dihubungkan dengan tombol yang sama.
Ketika Peta telah menerapkan Chaining Terpisah, maka cenderung menyerupai Kamus.
sumber