Berikut penjelasan dalam istilah awam.
Mari kita asumsikan Anda ingin mengisi perpustakaan dengan buku-buku dan tidak hanya mengisinya di sana, tetapi Anda ingin dapat dengan mudah menemukannya lagi saat Anda membutuhkannya.
Jadi, Anda memutuskan bahwa jika orang yang ingin membaca buku mengetahui judul buku dan judul yang tepat untuk boot, maka hanya itu yang diperlukan. Dengan judul, orang tersebut, dengan bantuan pustakawan, harus dapat menemukan buku dengan mudah dan cepat.
Jadi, bagaimana Anda bisa melakukan itu? Yah, jelas Anda dapat menyimpan beberapa jenis tempat Anda meletakkan setiap buku, tetapi kemudian Anda memiliki masalah yang sama seperti mencari di perpustakaan, Anda perlu mencari daftar itu. Memang, daftar akan lebih kecil dan lebih mudah untuk dicari, tetapi Anda tetap tidak ingin mencari secara berurutan dari satu ujung perpustakaan (atau daftar) ke yang lain.
Anda menginginkan sesuatu yang, dengan judul buku, dapat memberi Anda tempat yang tepat sekaligus, sehingga yang harus Anda lakukan hanyalah berjalan ke rak yang tepat, dan mengambil buku itu.
Tapi bagaimana itu bisa dilakukan? Nah, dengan sedikit pemikiran saat Anda mengisi perpustakaan dan banyak pekerjaan ketika Anda mengisi perpustakaan.
Alih-alih mulai mengisi perpustakaan dari satu ujung ke ujung yang lain, Anda membuat metode kecil yang pintar. Anda mengambil judul buku, menjalankannya melalui program komputer kecil, yang mengeluarkan nomor rak dan nomor slot di rak itu. Di sinilah Anda meletakkan buku.
Keindahan dari program ini adalah bahwa di kemudian hari, ketika seseorang kembali untuk membaca buku, Anda memberi makan judul melalui program sekali lagi, dan mendapatkan kembali nomor rak dan nomor slot yang sama dengan yang semula Anda berikan, dan ini adalah di mana buku itu berada.
Program, seperti yang telah disebutkan orang lain, disebut algoritma hash atau perhitungan hash dan biasanya bekerja dengan mengambil data yang dimasukkan ke dalamnya (judul buku dalam kasus ini) dan menghitung angka dari itu.
Untuk kesederhanaan, katakan saja itu hanya mengubah setiap huruf dan simbol menjadi angka dan merangkum semuanya. Pada kenyataannya, ini jauh lebih rumit dari itu, tapi mari kita selesaikan sekarang.
Keindahan dari algoritma semacam itu adalah bahwa jika Anda memasukkan input yang sama berulang kali, ia akan terus mengeluarkan angka yang sama setiap kali.
Ok, jadi pada dasarnya cara kerja tabel hash.
Hal-hal teknis berikut.
Pertama, ada ukuran angka. Biasanya, output dari algoritma hash tersebut berada di dalam kisaran sejumlah besar, biasanya jauh lebih besar dari ruang yang Anda miliki di tabel Anda. Misalnya, katakanlah kita memiliki ruang untuk tepat satu juta buku di perpustakaan. Output dari perhitungan hash bisa di kisaran 0 hingga satu miliar yang jauh lebih tinggi.
Jadi apa yang kita lakukan? Kami menggunakan sesuatu yang disebut perhitungan modulus, yang pada dasarnya mengatakan bahwa jika Anda menghitung ke angka yang Anda inginkan (yaitu satu miliar angka) tetapi ingin tetap berada di dalam rentang yang lebih kecil, setiap kali Anda menekan batas rentang yang lebih kecil itu Anda mulai kembali pada 0, tetapi Anda harus melacak seberapa jauh dalam urutan besar Anda telah datang.
Katakanlah bahwa output dari algoritma hash berada di kisaran 0 hingga 20 dan Anda mendapatkan nilai 17 dari judul tertentu. Jika ukuran perpustakaan hanya 7 buku, Anda menghitung 1, 2, 3, 4, 5, 6, dan ketika Anda sampai ke 7, Anda mulai kembali pada 0. Karena kita perlu menghitung 17 kali, kami memiliki 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, dan angka terakhirnya adalah 3.
Tentu saja perhitungan modulus tidak dilakukan seperti itu, itu dilakukan dengan pembagian dan sisanya. Sisa dari membagi 17 dengan 7 adalah 3 (7 berjalan 2 kali menjadi 17 pada 14 dan perbedaan antara 17 dan 14 adalah 3).
Dengan demikian, Anda meletakkan buku di slot nomor 3.
Ini mengarah ke masalah berikutnya. Tabrakan. Karena algoritme tidak memiliki cara untuk mengeluarkan buku sehingga mereka memenuhi perpustakaan dengan tepat (atau tabel hash jika Anda mau), itu akan selalu menghitung angka yang telah digunakan sebelumnya. Dalam arti perpustakaan, ketika Anda sampai ke rak dan nomor slot yang ingin Anda masukkan buku, sudah ada buku di sana.
Ada berbagai metode penanganan tabrakan, termasuk menjalankan data ke dalam perhitungan lain untuk mendapatkan tempat lain dalam tabel ( hashing ganda ), atau hanya untuk menemukan ruang yang dekat dengan yang Anda diberikan (yaitu tepat di sebelah buku sebelumnya dengan asumsi slot tersedia juga dikenal sebagai linear probing ). Ini berarti Anda harus melakukan beberapa penggalian saat Anda mencoba menemukan buku itu nanti, tetapi itu masih lebih baik daripada hanya mulai di salah satu ujung perpustakaan.
Akhirnya, pada titik tertentu, Anda mungkin ingin memasukkan lebih banyak buku ke perpustakaan daripada yang diizinkan perpustakaan. Dengan kata lain, Anda perlu membangun perpustakaan yang lebih besar. Karena tempat yang tepat di perpustakaan dihitung menggunakan ukuran perpustakaan yang tepat dan saat ini, maka akan mengikuti bahwa jika Anda mengubah ukuran perpustakaan Anda mungkin akhirnya harus menemukan tempat baru untuk semua buku karena perhitungan dilakukan untuk menemukan tempat mereka telah berubah.
Saya harap penjelasan ini sedikit lebih membumi daripada ember dan fungsi :)