Hash Table
Hash table adalah sebuah table yang isinya adalah sebuah
data yang berfungsi untuk memetakan nilai kunci unik untuk setiap baris menjadi
angka lokasi record tersebut di dalam tabel. Hash tabel sendiri memiliki sebuah
kelebihan yaitu waktu aksesnya cepat sehingga jika ada record yang di cari maka
langsung terletak pada angka hash lokasi storage nya.
Fungsi Hashing
Sebenarnya fungsi hashing itu bebas, terserah kalian
ingin mendefinisikannya seperti apa. Tapi, berikut adalah fungsi hashing yang
di harapkan :
·
Untuk dua buah key yang sama, hasil hashing-nya
selalu sama.
·
Memiliki kompleksitas rendah.
·
Meminimalkan collision (akan dijelaskan
pada bagian selanjutnya).
Ada beberapa operasi pada Hash tabel :
· - Insert
· - Find
· - Remove
· - getIterator
Hash
collision
Perhatikan bahwa jumlah
kemungkinan kunci sangat banyak. Jika kunci adalah nama, jumlah kemungkinan
nama tersebut sangat banyak, sedangkan jumlah sel dalam hash table terbatas. Hal
ini bisa memungkinkan terjadinya collision.
Karena collision tidak mungkin
terhindarkan, implementasi hash table harus menentukan apa yang harus dilakukan
bila terjadi collision. Salah satu cara yang banyak dipakai yaitu dengan
mengijinkan lebih dari satu nilai dalam satu lokasi. Umumnya hash table
menggunakan struktur data linked list untuk menyimpan lebih dari satu nilai
dalam satu lokasi yang sama.
Bila data akan dimasukkan ke dalam bucket
yang sudah ada isinya (collision terjadi), maka operasinya tidak sesederhana
pada kasus bucket kosong. Mari kita perhatikan animasi yang saya buat di bawah
ini.
Ketika memasukkan data (insert), pada
bucket yang tidak kosong maka perlu dilakukan operasi komparasi kunci untuk
melihat apakah kunci yang sama sudah ada di bucket itu atau belum. Bila kunci
yang sama ternyata ada di situ, artinya operasi insert berubah menjadi operasi
update, yaitu mengubah data yang lama dengan yang baru. Bila kunci yang
dimasukkan tidak ada di situ, maka kunci dan data yang dimasukkan akan disimpan
di node paling akhir dari bucket tersebut.
Berikut ini cara-cara yang digunakan untuk mengatasi
collision :
1. Closed hashing (Open Addressing)
Close hashing menyelesaikan collision dengan
menggunakan memori yang masih ada tanpa menggunakan memori diluar array yang
digunakan. Closed hashing mencari alamat lain apabila alamat yang akan dituju
sudah terisi oleh data. 3 cara untuk mencari alamat lain tersebut :
- Linear Probing
- Quadratic Probing
- Double hashing
2. Open hashing
Pada dasarnya open hashing membuat tabel yang
digunakan untuk proses hashing menjadi sebuah array of pointer yang
masing-masing pointernya diikuti oleh sebuah linked list, dengan chain (mata
rantai) 1 terletak pada array of pointer, sedangkan chain 2 dan seterusnya
berhubungan dengan chain 1 secara memanjang.
Tidak ada komentar:
Posting Komentar