Setelah mempelajari apa itu semua, saya berpikir untuk menulis penjelasan semoga lebih sederhana melalui analogi:
Rangkuman: Apa itu kode hash?
- Ini sidik jari. Kita dapat menggunakan sidik jari ini untuk mengidentifikasi orang-orang yang menarik.
Baca di bawah untuk detail lebih lanjut:
Pikirkan Hashcode saat kami mencoba Untuk Mengidentifikasi Seseorang secara Unik
Saya seorang detektif, sedang mencari penjahat. Mari kita memanggilnya Tn. Cruel. (Dia adalah seorang pembunuh terkenal ketika saya masih kecil - dia masuk ke sebuah rumah yang diculik dan membunuh seorang gadis miskin, membuang tubuhnya dan dia masih berkeliaran - tapi itu masalah yang terpisah). Tn. Cruel memiliki karakteristik khusus tertentu yang dapat saya gunakan untuk mengidentifikasinya secara unik di antara banyak orang. Kami memiliki 25 juta orang di Australia. Salah satunya adalah Tn. Cruel. Bagaimana kita dapat menemukannya?
Cara buruk Mengidentifikasi Tn. Kejam
Rupanya Tuan Cruel memiliki mata biru. Itu tidak banyak membantu karena hampir separuh populasi di Australia juga memiliki mata biru.
Cara yang baik untuk Mengidentifikasi Tn. Kejam
Apa lagi yang bisa saya gunakan? Saya tahu: Saya akan menggunakan sidik jari!
Keuntungan :
- Sangat sulit bagi dua orang untuk memiliki sidik jari yang sama (bukan tidak mungkin, tetapi sangat tidak mungkin).
- Sidik jari Tn. Cruel tidak akan pernah berubah.
- Setiap bagian dari seluruh keberadaan Mr Cruel: penampilan, warna rambut, kepribadian, kebiasaan makan, dll. Harus (idealnya) tercermin dalam sidik jarinya, sehingga jika ia memiliki saudara lelaki (yang sangat mirip tetapi tidak sama) - maka keduanya harus memiliki sidik jari yang berbeda . Saya katakan "harus" karena kami tidak dapat menjamin 100% bahwa dua orang di dunia ini akan memiliki sidik jari yang berbeda.
- Tetapi kami selalu dapat menjamin bahwa Tuan Cruel akan selalu memiliki sidik jari yang sama - dan sidik jarinya tidak akan pernah berubah.
Karakteristik di atas umumnya membuat fungsi hash yang baik.
Jadi apa masalahnya dengan 'Tabrakan'?
Jadi bayangkan jika saya mendapat petunjuk dan saya menemukan seseorang yang cocok dengan sidik jari Pak Cruel. Apakah ini berarti saya telah menemukan Tn. Kejam?
........mungkin! Saya harus melihat lebih dekat. Jika saya menggunakan SHA256 (fungsi hashing) dan saya mencari di kota kecil dengan hanya 5 orang - maka ada peluang yang sangat baik saya menemukannya! Tetapi jika saya menggunakan MD5 (fungsi hashing terkenal lainnya) dan memeriksa sidik jari di kota dengan +2 ^ 1000 orang, maka itu adalah kemungkinan yang cukup baik bahwa dua orang yang sama sekali berbeda mungkin memiliki sidik jari yang sama.
Jadi apa manfaat dari semua ini?
Satu-satunya manfaat nyata dari kode hash adalah jika Anda ingin meletakkan sesuatu di tabel hash - dan dengan tabel hash Anda ingin menemukan objek dengan cepat - dan di situlah kode hash masuk. Mereka memungkinkan Anda untuk menemukan hal-hal dalam tabel hash benar-benar segera. Ini adalah retasan yang secara besar-besaran meningkatkan kinerja, tetapi dengan sedikit akurasi.
Jadi mari kita bayangkan kita memiliki tabel hash yang penuh dengan orang - 25 juta tersangka di Australia. Tuan Cruel ada di suatu tempat di sana ..... Bagaimana kita dapat menemukannya dengan sangat cepat ? Kita perlu memilah-milah semuanya: untuk menemukan pasangan potensial, atau untuk membebaskan tersangka potensial. Anda tidak ingin mempertimbangkan karakteristik unik setiap orang karena itu akan memakan terlalu banyak waktu. Apa yang akan Anda gunakan? Anda akan menggunakan kode hash! Kode hash dapat memberi tahu Anda jika dua orang berbeda. Apakah Joe Bloggs BUKAN Tuan Kejam. Jika cetakan tidak cocok maka Anda tahu pasti BUKAN Tn. Cruel. Tapi, jika sidik jari cocokkemudian tergantung pada fungsi hash yang Anda gunakan, kemungkinan Anda sudah cukup baik menemukan pria Anda. Tapi ini tidak 100%. Satu-satunya cara Anda dapat memastikan adalah untuk menyelidiki lebih lanjut: (i) apakah dia memiliki kesempatan / motif, (ii) saksi dll.
Ketika Anda menggunakan komputer jika dua objek memiliki nilai kode hash yang sama, maka Anda perlu menyelidiki lebih lanjut apakah keduanya benar-benar sama. mis. Anda harus memeriksa apakah objek memiliki tinggi yang sama, berat yang sama, dll., jika bilangan bulatnya sama, atau apakah customer_id cocok, dan kemudian sampai pada kesimpulan apakah benda-benda itu sama. ini biasanya dilakukan mungkin dengan mengimplementasikan antarmuka IComparer atau IEquality.
Ringkasan Kunci
Jadi pada dasarnya kode hash adalah sidik jari.
- Dua orang / objek yang berbeda secara teoritis masih dapat memiliki sidik jari yang sama. Atau dengan kata lain. Jika Anda memiliki dua sidik jari yang sama ......... maka keduanya tidak perlu berasal dari orang / objek yang sama.
- Buuuuuut, orang / objek yang sama akan selalu mengembalikan
sidik jari yang sama .
- Yang berarti bahwa jika dua objek mengembalikan kode hash yang berbeda maka Anda tahu 100% kepastian bahwa objek tersebut berbeda.
Dibutuhkan 3 menit yang baik untuk mendapatkan kepala Anda di atas. Mungkin membacanya beberapa kali sampai masuk akal. Saya harap ini membantu seseorang karena butuh banyak kesedihan bagi saya untuk mempelajari semuanya!