Mengapa itu disebut "tabel hash", atau "fungsi hash"? Hash tidak masuk akal bagi saya di sini [ditutup]


26

Sekarang sekitar 4 tahun pengembangan yang saya gunakan, dengar, bicarakan, dan terapkan tabel hash dan fungsi hash. Tapi aku benar-benar tidak pernah mengerti mengapa ini disebut hash?

Saya ingat hari-hari pertama saya memulai pemrograman, istilah ini baik untuk saya istilah yang rumit . Saya tidak pernah tahu apa itu, berdasarkan namanya . Saya hanya memahami secara eksperimental apa yang dilakukannya dan mengapa serta kapan kita harus menggunakannya .

Namun, saya kadang-kadang masih mencoba mencari tahu mengapa itu disebut hash . Saya tidak punya masalah dengan tabel atau fungsi dan sejujurnya, mereka cukup deduktif, istilah yang rasional. Namun, saya pikir kata yang lebih baik dapat digunakan daripada hash, seperti kunci , atau keunikan . Jangan kunci tabel atau tabel keunikan .

Menurut kamus saya, hash berarti:

  1. Hidangan kentang goreng dan daging (sangat tidak relevan)
  2. # simbol (tanda nomor AKA, tanda pound, dll.) (masih tidak relevan, mungkin hanya salah tandatangan)
  3. Terapkan algoritma ke string karakter (masih tidak ada hubungannya dengan keunikan , yang merupakan fitur paling penting dari tabel hash)
  4. Potong makanan
  5. Istilah lain untuk ganja

Adakah yang tahu mengapa ini disebut hash?


32
Anda tampaknya sedikit salah paham tentang hash. Keunikan secara eksplisit bukan fitur fungsi hash (yaitu mereka tidak pernah injeksi).
Peter Taylor

1
@ Peter Taylor: tabel hash mendefinisikan pemetaan injeksi.
reinierpost

2
@ Peter Taylor: untuk menjadi sedikit rewel, mereka tidak perlu suntik , tapi kadang-kadang mereka bahkan bijektif. Pikirkan implementasi khas fungsi hashing untuk integer :)
keppla

4
Hash dapat menjadi unik, selama ruang kuncinya tidak lebih besar dari ruang nilai hash (untuk hash tabel), atau ruang nilai hash adalah sebesar itu bahwa tabrakan tidak mungkin secara matematis (untuk hash kriptografi).
Aman

1
Juga, "tabel kunci" terdengar lebih seperti struktur data "kunci / nilai" (juga disebut "kamus"). Tidak semua struktur data kunci / nilai adalah tabel hash.
barjak

Jawaban:


46

Menurut wikipedia, ini merujuk pada fungsi hash . Jika Anda ingin melangkah lebih jauh, halaman wiki untuk fungsi hash mengatakan bahwa penggunaan kata "hash" dalam fungsi hash berasal seperti:

Istilah "hash" datang dengan analogi dengan makna non-teknis, untuk "memotong dan mencampur". Memang, fungsi hash yang khas, seperti operasi mod, "memotong" domain input ke banyak sub-domain yang "dicampur" ke dalam rentang output untuk meningkatkan keseragaman distribusi kunci.


2
Tidak yakin apa yang dilakukan 'sub-domain' di sana. Hanya saja fungsi hash secara menyeluruh 'mencampur-aduk' nilai-nilai domainnya.
reinierpost

15

Di Perancis, tabel hash disebut "table de hachage", kata kerja yang terkait "hacher" berarti memotong / memotong daging (kebanyakan makanan). Kata kerjanya to hashmemiliki arti yang sama dalam bahasa Inggris.

Jadi seperti yang telah ditunjukkan oleh orang lain itu disebut hash, karena Anda memotong input Anda yang Anda potong-potong di berbagai tempat (entri tabel Anda).


2
Ini sebenarnya ditulis "hachage" dan "hacher" tanpa aksen.
Ptival

10

Nomor 3 ada hubungannya dengan itu. Dari Wikipedia :

Di jantung algoritma tabel hash adalah array item sederhana; ini sering disebut tabel hash . Algoritma tabel hash menghitung indeks dari kunci item data dan menggunakan indeks ini untuk menempatkan data ke dalam array. Pelaksanaan perhitungan ini adalah fungsi hash , f:

index = f(key, arrayLength)

Fungsi hash menghitung indexdalam array dari data key. arrayLengthadalah ukuran array. Untuk bahasa rakitan atau program tingkat rendah lainnya, fungsi hash sepele seringkali dapat membuat indeks hanya dengan satu atau dua instruksi mesin sebaris .

Jadi tabel hash tidak benar-benar menyimpan nilai berdasarkan kunci; itu menyimpan nilai berdasarkan versi hash kunci itu.


1
itu tergantung pada apa yang Anda maksud dengan tabel hash. Struktur data yang ditawarkan dalam bahasa seperti Perl, Java dan C # memang memberi Anda pemetaan kunci-ke-nilai, menggunakan jenis tabel hash yang Anda lihat secara internal.
reinierpost

10

tabel hash disebut seperti itu karena menggunakan kode hash dan itu terkait dengan "memotong makanan".

Pikirkan seperti ini - Anda mengambil objek cantik yang bagus, seperti buah, lalu hash sehingga mulai terlihat seperti yang lain - hanya angka - tidak ada lagi struktur di dalamnya. Sepotong "potong makanan" digunakan dalam tabel hash untuk mengetahui objek cantik Anda.

  • Terlihat lebih jelek dari objek cantikmu? mungkin - tetapi membantu menemukannya dengan cepat - itulah intinya. oh dan itu tidak unik itu pasti.
     
    Kode hash menemukan ember di tabel tempat objek cantik Anda berada di perusahaan kecil orang lain dengan kode hash yang sama. Di dalam perusahaan kecil ini , objek dipandang menggunakan pemeriksaan kesetaraan - yang diharapkan jauh lebih lambat daripada pencarian hash tapi itu bukan masalah besar karena hanya ada beberapa (sebagian besar objek lain sudah diabaikan berkat hash cepat) .

3

Hashing (seperti memotong menjadi potongan-potongan kecil, merobek-robek, dll.) Mengambil input (makanan atau kadang-kadang supervillains) dan mengubahnya menjadi output yang relatif homogen. Yaitu tidak peduli apa yang Anda miliki di awal, pada akhirnya Anda hanya memiliki hash. Dan sesendok hash sekitar sama bermanfaatnya dengan semua hash dalam menentukan, apa inputnya (dengan asumsi hashing machine Anda hashes dengan baik).
Jadi hashing dapat mengurangi objek yang dapat dimakan atau jahat menjadi sesendok hash, di mana dua objek yang berbeda menghasilkan hash yang berbeda, sedangkan dua objek yang sama menghasilkan hash yang sama. Yang berarti jika dua supervillains jatuh ke mesin hashing Anda, cukup membandingkan hash mereka untuk menentukan apakah satu adalah tiruan dari yang lain.

Dalam beberapa hal fungsi hashing dalam ilmu komputer agak mirip. Mereka mengambil seluruh input dari ukuran dan semantik yang berbeda, dan - sangat sederhana - mereka hanya memotongnya menjadi potongan-potongan dan mencampurnya di sekitar dan memotong urutan yang dihasilkan kembali menjadi potongan-potongan dan mencampurnya di sekitar dan seterusnya. Pada akhirnya Anda memiliki sesendok (n byte) dari input yang Anda hash.


Namun dengan peringatan penjahat super juga dapat mengembalikan hash yang sama sebagai pahlawan super dengan serangkaian parameter yang diberikan karena hashing tampaknya tidak menentukan keunikan. Bagaimanapun, ada tabrakan hash ... ini yang Anda lakukan setelah tabrakan ...
Rig
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.