• Tidak ada hasil yang ditemukan

BAB II LANDASAN TEORI

2.2 Metode Hash

Sekarang telah banyak algoritma dan metode – metode pencarian yang digunakan untuk pengolahan data, terutama jika data tersebut tersedia dalam jumlah banyak. Salah satu metode yang dipergunakan saat ini adalah Metode

Hash. Metode Hash atau Hashing adalah proses untuk melakukan kalkulasi

pencarian posisi dari kunci pada table yang didasarkan pada nilai dari kunci

Java Secure Applications Multiplatform Applications Web Applications GUI - Based Applications Distributed networking Applications Mission - Critical Applications Multithreaded Applications Object - Oriented Applications

tersebut (Adam Drozdek, 2008). Hashing digunakan sebagai metode untuk menyimpan data dalam sebuah array agar proses penyimpanan data, pencarian data dan penghapusan data dapat dilakukan dengan cepat. Pada hashing ini terjadi proses menghitung posisi record yang di cari dalam array, bukan membandingkan record yang ada dengan isi array.

Proses untuk mengkonversi nilai kunci (key) ke posisi larik atau array di sebut fungsi hash. Sedangkan array atau larik yang digunakan untuk menyimpan data di sebut table hash.

a. Fungsi Hash

Fungsi Hash (dilambangkan dengan h) bertugas untuk menghitung indeks array yang berasal dari perhitungan kunci (indeks array dari perhitungan kunci disebut kode hash). Untuk mencari kunci di dalam tabel hash kita perlu menghitung kode hash kunci tersebut. Ada beberapa fungsi hash yang banyak digunakan saat ini

1. Metode Pembagian Sisa (Division remainder method)

Metode pembagian sisa menggunakan jumlah lokasi memori yang tersedia sebagai pembagi untuk membagi nilai yang asli dan menghasilkan sisa bagi. Sisa bagi tersebut adalah nilai hashnya. Secara umum rumus dari fungsi hash ini adalah h(k) = k mod m, k adalah nilai kunci dan m adalah jumlah lokasi memori yang tersedia pada array(larik).

Fungsi hash ini akan menempatkan record dengan kunci (k) pada lokasi memori yang memiliki alamat (h(k)).

Sebagai contoh, jika kita ingin menempatkan nomor mahasiswa dengan nomor mahasiswa 65314057 ke dalam table hash. Misalkan memori memiliki 100 buah alamat yang masing – masing alamat terdiri dari 2 karakter : 00…99. Untuk menentukan alamat dari NIM tersebut kita pilih bilangan prima yang dekat dengan 99, misalkan m = 97. Dengan menggunakan fungsi h(k) = k mod m, diperoleh h(65314057) = 77. Dengan demikian, nomor mahasiswa 65314057 akan disimpan dalam alamat 77.

2. Metode Midsquare

Dalam metode ini, kunci yang diketahui dikuadratkan dan nilai tengah dari hasil kuadrat dari kunci tersebut diambil angka tengahnya sebagai alamat. Rumus untuk metode midsquare adalah sebagai berikut :

h(k)= l

nilai l diperoleh dengan menghapus digit – digit angka pada dua sisi dari k2, dengan catatan bahwa banyak digit di sebelah kiri dan sebelah kanan

angka disebelah kiri seolah – olah ditambahkan dengan angka nol. Sehingga menghasilkan alamat yang benar.

Sebagai contoh, ketika ingin menentukan alamat untuk nilai k = 65314057, adalah dengan mengkuadratkan nilai ktersebut kemudian

mengambil nilai tengah dari hasil dari k2 tersebut.

k = 65314057

k2=4265926|04|1799249

h(k) = 04

b. Resolusi Collision(Tabrakan)

Dalam memasukan nilai kunci ke alamat dapat timbul kemungkinan bahwa rekaman(record) dengan nilai kunci yang sama dimasukan pada satu alamat rekaman yang sama. Kita harus memiliki satu cara untuk mengatasi tabrakan yang mungkin terjadi, yang disebut dengan collision resolution. Cara yang baik untuk mengatasi adanya tabrakan antarai lain dengan perbandingan banyaknya data kunci (n) dalam k, dan banyaknya alamat hash(m) dalam

l(array atau larik). Perbandingan ini memiliki rumus, . kemampuan fungsi hash yang dilengkapi dengan prosedur untuk mengatasi tabrakan diukur dengan adanya perbandingan kunci yang diperlukan untuk mencari alamat dari rekaman yang mempunyai kunci k. efesiensi terhadap faktor beban dan diukur menggunakan dua besaran berikut ini :

B() = rata – rata probe untuk pencarian yang berhasil

G() = rata – rata probe untuk pencarian yang gagal

1. Open Addressing (Pengalamatan Terbuka)

Di dalam metode pengalamatan terbuka, ketika kunci bertabrakan dengan kunci yang lain. Tabrakan dapat diselesaikan dengan menemukan tabel alamat hash yang kosong. Jika ternyata alamat hash sudah terisi, maka harus dicari alamat lain yang masih kosong. Ada beberapa cara yang digunakan untuk mengatasi tabrakan dengan open addressing sebagai berikut :

a. Linear probing

Cara termudah adalah dengan menggunakan linear probing,

yaitu dengan mencari alamat berikutnya yang masih kosong. Dengan rumus :

Keterangan :

h = Index pada table hash m = Panjang table hash

Berikut adalah contoh kasus untuk LinearProbing, jika data 7, 13, 25, 27 ingin dimasukan ke dalam table hash dengan m = 13.

Gambar 2.2 Contoh Linear Probing

Tabrakan yang terjadi pada data 39 di indeks 0 diselesaikan dengan bergeser ke indeks 1. Karena indeks 1 juga telah terisi maka data 39 bergeser ke indeks 2. Karena indeks 2 masih kosong maka data 39 dapat dimasukkan.

b. Quadratic Probing

Quadratic Probing mencari alamat baru untuk ditempati

dengan proses perhitungan kuadratik yang lebih kompleks. Tidak ada rumus baku pada quadratic probing. Kita dapat menentukan sendiri rumus yang akan digunakan.

c. Double Hashing

Double hashing adalah salah satu metode pengalamatan terbaik yang tersedia untuk pengalamatan terbuka(open addressing) sebab

permutasi yang dihasilkan mempunyai banyak karakteristik permutasi yang terpilih secara acak(Thomas H. Cormen, 2009).

Double Hashing menggunakan fungsi hash kedua dan

menangani tabrakan dengan menempatkan item di dalam kolom yang tersedia(kosong). Fungsi hash kedua yang digunakan setelah alamat yang didapat dari fungsi hashawal telah terisi. Syarat dari metode ini adalah ukuran table hashmerupakan bilangan prima, untuk menghindari siklus pencarian slot yang sama.

Contoh fungsi hash adalah h1 = k mod m, dimana k adalah nilai kunci dan m adalah panjang tablehash. Jika hasil dari h1 mengalami tabrakan kunci pada table hash maka dapat menggunakan fungsi hash

kedua

Keterangan :

h2 = Fungsi hash ke – dua

k = Indeks table hash yang mengalami tabrakan

s = Nilai jarak lompatan

m = Panjang table hash

Dengan s didapat dari rumus berikut :

c adalah konstanta dengan syarat nilai c harus bilangan prima dan lebih kecil dari panjang table hash. Contoh kasus untuk double hashing adalah sebagai berikut :

Jika data 76, 93, 40, 47, 10, dan 55 ingin dimasukan ke dalam

tablehash dengan m = 7 dan nilai kontanta = 5.

Gambar 2.3 Contoh Double Hashing

(Sumber : https://www.cs.washington.edu)

Kelemahan dari open addressing adalah ukuran array(table hash) yang disediakan harus lebih besar dari jumlah data. Selain itu dibutuhkan memori yang lebih besar untuk meminimalkan terjadinya collision.

Separate Chaining(Pengandengan)

Metode pengandengan merupakan metode lain yang digunakan untuk mengatasi kemungkinan adanya tabrakan alamat hash. Metode ini memanfaatkan senarai berantai yang dipasang pada setiap alamat hash

yang diketahui. Pada metode pengandengan ini, jumlah elemen yang dapat disimpan hanya dibatasi oleh kapasistas memori komputer yang tersedia.

Jika kita memiliki sebuah alamat hash lengkap dan senarai menyimpan rekaman – rekaman yang mempunyai alamat hash yang sama, maka kita akan melihat adanya sebuah senarai tunggal berkepala.

Sebagai contoh, jika kita mempunyai rekaman – rekaman yang kunci rekamanya dituliskan sebagai berikut :

35 56 15 50 91 100 28 11 29 79

83 43

Fungsi hash yang digunakan adalah k mod 10. Dengan demikian, alamat hashakan terdiri dari 10 buah alamat yang memiliki nomor 0 sampai 9.

Gambar dibawah ini menunjukan alamat hash lengkap dengan senarai berantainya untuk menyimpan rekaman - rekaman di atas.

Gambar 2.4 Metode Chaining(Pengandengan)

c. Fungsi Hash Metode Pembagian Sisa Pada String

Penanganan tipe data String pada fungsi hash adalah mengubah nilai karakter pada String diubah menjadi nilai char berdasarkan kode ASCII. Dan dilakukan proses untuk menghitung nilai kunci, dan akan diperoleh nilai kunci yang unik, dari beberapa String yang memiliki karakter kata yang sama tetapi akan di peroleh nilai kunci yang berbeda.

Alamat Hash Rekaman 0 1 2 3 4 5 6 7 8 9 35 56 15 50 91 100 28 11 29 79 83 43

Penanganan ukuran kunci haruslah dilakukan secara hati – hati, hal ini dilakukan untuk membuat ukuran kunci hasil transformasi menjadi tidak terlalu besar sehingga sulit untuk disimpan di memori. Ini dapat diselesaikan dengan memecah kunci transformasi menjadi potongan – potongan nilai, dan kemudian mengkombinasikan potongan – potongan nilai itu (Adi Nugroho, 2008).

Penggunaan fungsi hash pada String menggunakan fungsi hash metode pembagian sisa(Division Remainder) yang diperbaharui dengan menambahkan proses penanganan tipe data String. Fungsi hash metode pembagian sisa(Division Remainder) String tersebut ditunjukan dengan rumus sebagai berikut :

Keterangan :

NK = Nilai Kunci

A = Nilai karakter kata pada String

X = Jumlah keseluruhan karakter pada ASCII yaitu 128

h = Panjang table hash

Pada rumus di atas terlebih dahulu nilai dari karakter kata akan dikalikan dengan X, kemudian akan dilakukan modulu. Nilai dari karakter kata

yang telah di modulu tersebut akan dikalikan dengan X dan kemudian nilainya akan ditambahkan dengan nilai karakter kata selanjutnya kemudian akan modulukan lagi. Proses tersebut akan terus berlanjut sampai dengan karakter kata habis, Setelah semua proses selesai maka akan didapat hasil dari nilai Kunci dari kata tersebut. Setiap katakter kata sebelum ditambahkan dengan karakter kata selanjutnya akan dikalikan dengan 128, hal tersebut dilakukan untuk mendapatkan nilai karakter yang unik. Dan selesai penambahan karakter kata akan dilakukan modulu panjang table hash, hal tersebut dilakukan agar nilai kunci tidak terlalu besar dari pada panjang table hash.

Untuk mempermudah pemahaman tentang penangangan String di atas, disertakan contoh, jika ada 2 buah kata yaitu kau dan aku. Dua kata tersebut memiliki karakter yang sama. Dengan menggunakan penanganan string biasa kita hanya akan menambahkan nilai karakter kata tersebut(berdasarkan kode ASCII) sehingga menghasilkan nilai dari kata tersebut.

Gambar 2.5 Karakter ASCII

Untuk Karakter kau memiliki 3 karakter kata yaitu k,a,u. dan untuk aku

memiliki 3 karakter kata a,k,u. Jika dilakukan penanganan string dengan biasa akan di dapat hasil sebagai berikut :

Nilai Kata 1 = „k‟+‟a‟+‟u‟, setiap karakter diubah berdasarkan kode ASCII = 107+97+117

= 321

Nilai Kata 2 = „a‟+‟k‟+‟u‟ setiap karakterdiubah berdasarkan kode ASCII = 97+107+117

= 321

Dari hasil di atas didapatkan bahwa kedua kata tersebut memiliki nilai kata yang sama sehingga kita di lakukan fungsi hash, maka kedua kata tersebut akan mengalami tabrakan.

Maka dari itu akan dilakukan penanganan string yang lebih unik yaitu dengan menggunakan rumus di atas, agar nilai String yang dihasilkan menjadi lebih unik.

Nilai Kata 1 = ((((k*128)Mod 13)*128+a)Mod 13)*128+u)Mod 13 ( setiap karakter diubah berdasarkan kode ASCII)

= ((((107*128)Mod 13)*128+97)Mod 13)*128+117)Mod 13

= 3

Nilai Kata 2 = ((((a*128)Mod 13)*128+k)Mod 13)*128+u)Mod 13 (setiap karakterdiubah berdasarkan kode ASCII)

= ((((97*128)Mod 13)*128+107)Mod 13)*128+117)Mod 13

= 11

Dari hasil diatas di dapat bahwa dengan menggunakan penanganan string yang lebih khusus akan menghasilkan nilai kata yang lebih unik.

Dokumen terkait