Anda di halaman 1dari 9

HASHING 1. PENDAHULUAN 1.1.

LATAR BELAKANG Dalam kehidupan sehari hari pengolahan data sering kali menjadi pelit mana kala ditemukan data yang sama. Sehingga seseorang sering bingung ketika disuruh untuk membedakan sebuah data yang diinginkan. Selain itu keamanan dan kerahasiaan data pada jaringan computer saat ini juga menjadi isu yang sangat penting dan terus berkembang. Berkenaan dengan hal tersebut maka diperlukan suatu fungsi hash untuk mengatasi permasalahan. Hashing merupakan metode untuk menyimpan dan mengambil catatan dari database. Hal ini memungkinkan kita untuk melakukan penyisipan, menghapus, dan mencari catatan berdasarkan nilai kunci pencarian. Hashing adalah metode pencari pilihan karena sangat efisien ketika diterapkan dengan benar. Bahkan, system hash yang diprogram dengan benar biasanya melihat hanya satu atau dua catatan untuk setiap pencarian, insert, atau menghapus operasi. Waktu pencarian data melalui hashing jauh lebih effisien dari pada pencarian data biner pada array yang diurutkan dari n catatan dengan waktu O (log n), atau pencarian data dengan binary tree yang mana memiliki waktu O(log n). Namun pada kenyataannya hashing sulit untuk diterapkan dengan benar. Hashing bekerja dengan melakukan perhitungan melalui sebuah key (kunci) pencarian dengan cara mengidentifikasi posisi dalam hash table yang berisi catatan dengan key dari data data yang ada pada database dengan inisialisasi key yaitu K. Fungsi yang melakukan perhitungan pada table hash disebut fungsi hash dan diberi lambing dengan huruf h. Pada dasarnya sistem hashing digunkan untuk mengatur pencarian suatu posisi data dalam table hash yang dikenal dengan slot. 1.2.RUMUSAN MASALAH Pengertian hashing. Fungsi hashing. Separate chaining. Hash table tanpa linked list. Rehashing. Hash table di perpustakaan standar Extendible hashing.

a) b) c) d) e) f) g)

1.3.TUJUAN PENULISAN Dengan adanya makalah ini maka dapat diketahui tentang apa itu hashing yang ternyata sangat berfungsi dalam pengolahan database. Selain itu dengan adanya makalah ini maka dapat diketahui fungsi apa saja yang menyusun sebuah metode hashing, kendala apa yang bisa ditemui serta penyelesaiannya dengan hashing karena dalam makalah ini terdapat beberapa teknik yang dapat digunakan jika terjadi collision (tabrakan) atau dengan kata lain record menghasilkan nilai hash yang sama. 2. PEMBAHASAN 2.1.PENGERTIAN HASHING Hasing adalah teknik untuk melakukan penambahan,penghapusan,dan pencarian dengan rata rata waktu konstan. Selain itu hashing juga dikenal dengan sebutan hash table. Hash tables adalah array dengan sel-sel yang ukurannya telah ditentukan dan dapat berisi data atau key yang berkesesuaian dengan data. Selain itu Hash tables merupakan struktur data yang sering digunakan untuk mengimplementasikan ADT pada sebuah Dictionary, yaitu ADT yang hanya mengizinkan pencarian, penyisipan, dan penghapusan elemen-elemen yang ada didalamnya.
1

Pada hakekatnya hash table merupakan solusi yang sangat effisien dalam mengatasi masalah pencarian pada sebuah data. Hal ini dikarenakan table hash seperti halnya hash Map menyimpan setiap pasangan kunci atau nilai dari setiap data. Jika diketahui sebah kuncinya maka bukan hal yang mustahil lagi untuk mencari atau mengetahui nilai dari data tersebut. Namun lain halnya jika hash table diimplementasikan pada system set data maka untuk mencari sebuah nilai kita harus mencari kunci di dalam table hash padahal semua nilai yang berada dalam table berisi null. Pada berbagai macam algoritma untuk pencarian data dalam menemukan sebuah item suatu data maka dipelukan mencari item yang tidak diinginkan juga. Begitu pula dengan pencarian data pada sebuah list yang tidak terurut, diperlukan pengecekan isi satu persatu item hingga item yang dicari ditemukan. Mungkin dalam pencarian data akan lebih mudah jika pencarian pasangan nilai dengan kunci pada table hash bisa dilakukan secara langsung tanpa harus mencari item lain yang tidak diperlukan dalam pencarian item. Katakanlah kunci dari sebuah nilai pada table hash adalah integer dari 0 99, maka pasangan dari j=kunci tersebut bisa disimpan dalam sebuah array A yang berisi100 elemen. Sedangkan kunci dari nilai tersebut diberi lambang sebagai N dengan kata lain dapat ditulis A[N]. kunci N tersebut yang akan membantu pencarian data secara langsung. Namun hal ini tidak bisa digunakan secara terus menerus, andaikata ada 4 milyar lokasi untuk menyimpan data pada sebuah array, tentunya akan menjadi suatu masalah karena dirasakan kurang effisien dan membutuhkan banyak ruang memori untuk menyimpan data. Misal data yang dimasukkan berupa string yang tidak diketaui berapa panjang datanya maka diperlukan pula penyimpanan data pada ruang memori yang tak terbatas. Dapat kita simpulkan bahwa array tidak dapat digunakan untuk menyimpan semua kunci pada hash table. Untuk mengatasi hal tersebut di atas dalam menyimpan data pada sebuah array maka indeks pada array tidak sama dengan kunci melainkan indeks pada array dihitung dari kunci. Indeks array dari hasil perhitungan kunci disebut dengan kode hash. Sedangkan fungsi untuk menghitung kode hash disebut dengan fungsi hash. Untuk mencari sebuah kunci dalam table hash, hanya diperlukan menghitung kode hash kunci kemudian menunjuk lokasi dari kode hash tersebut. Sebagai contoh, misal hasil penghitungan kunci dari kode hash adalah 17 maka array yang ditunjuk dalah array dengan indeks 17. Mungkin saja dalam suatu array ditemukan dua atau lebih kunci yang terletak pada lokasi yang sama sehingga akan ada lebih sedikit lokasi array. Hal semacam ini disebut dengan collision atau tabrakan data. Tabrakan data bukanlah suatu masalah , hal ini dikarenakan mungkin saja suatu kunci memiliki kode hash yang sama dengan kode hash kunci lain. Oleh sebab itu table hash harus bisa menangani tabrakan data tersebut dengan baik. Pada java , setiap lokasi pada array sebenarnya adalah suatu list berantai yang berisi pasangan kunci atau nilai (ada kemungkinan list kosong). Jika dua item memiliki kode hash yang sama, maka kedua item tersebut akan ada pada list yang sama. Strukturnya bisa digambarkan sebagai berikut:

Gambar 1.1 struktur list item pada array Keterangan: Pada gambar di atas, hanya ada satu item dengan kode hash 0, tidak ada item dengan kode hash 1, dua item dengan kode hash 2, dan seterusnya. Pada tabel hash yang dirancang dengan benar, hampir semua list berantai berisi nol atau satu elemen saja, dengan rata-rata panjang list kurang dari 1. Meskipun kode hash dari suatu kunci mungkin tidak membawa kita langsung pada kunci yang kita mau, akan tetapi tidak akan lebih dari satu atau dua item yang harus kita cari sebelum kita sampai pada item yang kita inginkan. Agar bekerja dengan benar, jumlah item dalam tabel hash harus kurang dari besarnya array. Pada Java, ketika jumlah item melebihi 75% ukuran array, maka array tersebut akan diganti dengan array yang lebih besar dan semua item pada array yang lama dipindahkan ke array baru. Pada umumnya ukuran hash table (Table Size) lebih besar dari jumlah data yang akan disimpan. Untuk setiap key, digunakan fungsi hash untuk memetakan key pada bilangan antara 0 sampai Tablesize-1.Untuk menambahkan data atau pencarian,ditentukan key dari data tersebut dan digunakan sebuah fungsi hash untuk memetakan elemen pada indeks dari hash table. 2.2.HASH FUNCTION Merupakan fungsi yang menerima masukan string yang panjangnya sembarang, lalu mentransformasikannya menjadi string keluaran yang panjangnya tetap (fixed) (umumnya berukuran jauh lebih kecil daripada ukuran string semula). Fungsi hash sering juga disebut fungsi enkripsi satu arah, atau disebut juga message diggest. Fungsi hash digunakan untuk menjamin servis otentikasi dan integritas suatu pesan atau file. Suatu fungsi hash (h) memetakan bit-bit string dengan panjang sembarang ke sebuah string dengan panjang tertentu misal n. Dengan domain D dan range R maka proses hashing merupakan proses pemetaan suatu input string menjadi output. Output dari fungsi hash disebut nilai hash atau hasil hash. Fungsi hash satu arah adalah sebuah fungsi hash yang berjalan hanya satu arah sehingga mudah untuk menghitung nilai hash dari pre-image, tetapi sangat sulit untuk membangkitkan pre-image dari nilai hash-nya. Fungsi hash satu arah tersebut dibuat berdasarkan ide tentang fungsi pemampatan. Fungsi hash adalah sebuah fungsi atau persamaan matematika yang mengambil input dengan panjang variabel (preimage) dan merubahnya menjadi panjang yang tetap (biasanya lebih pendek), keluarannya biasa disebut nilai hash. Persamaan fungsi hash:
3

h = H(M) M = pesan kuran sembarang h = nilai hash (hash value) atau pesan-ringkas (messagedigest) h <<<< M Contoh: size(M) = 1 MB, size(h) = 128 bit !!!! Nama lain fungsi hash adalah: fungsi kompresi (compression function) cetak-jari (fingerprint) cryptographic checksum message integrity check (MIC) manipulation detection code (MDC) Sifat-sifat fungsi hash satu-arah adalah sebagai berikut: a) Fungsi H dapat diterapkan pada blok data berukuran berapa saja. b) H menghasilkan nilai (h) dengan panjang tetap (fixed-length output). c) H(x) mudah dihitung untuk setiap nilai x yang diberikan. d) Untuk setiap h yang dihasilkan, tidak mungkin dikembalikan nilai x sedemikian sehingga H(x) = h. Itulah sebabnya fungsi H dikatakan fungsi hash satu arah (one way hash function). e) Untuk setiap x yang diberikan, tidak mungkin mencari y x sedemikian sehingga H(y) = H(x). f) Tidak mungkin mencari pasangan x dan y sedemikian sehingga H(x) = H(y). Masukan fungsi hash adalah blok pesan (M) dan keluaran dari hashing blok pesan sebelumnya, hi = H(Mi, hi 1) Skema fungsi hash ditunjukkan pada Gambar 1 Mi hi-1
Fungsi hash satu -arah

hi

Gambar 1.2 Fungsi hash satu-arah 2.3.SEPARATE CHAINING Merupakan salah satu teknik untuk menyelesaikan permasalahan ketika terjadi collision dalam memori pada table. Sistem kerja dari fungsi ini adalah dengan memposisikan setiap data yang ada pada table hash sebagai linked list. ketika memasukkan data baru ke suatu tempat yang sudah diambil, kita hanya mmebuat node baru dan memasukkan ke daftar elemen table hash tersebut. Kelebihan dari method chaining adalah proses penghapusan yang relative mudah dan penambahan ukuran table hash yang bisa ditunda untuk waktu yang lama karena penurunan kinerjanya berbanding lurus meskipun seluruh lokasi pada table sudah penuh. Bahkan penambahan ukuran table bisa saja tidak perlu dilakukan sama sekali karena penurunan kinerjanya yang linear. Misalnya, table yang berisi record sebanyak dua kali lipat dibanding yang berisi sebanyak kapasitas yang direkomendasikan. Kekurangan dari metode chaining sama dengan kekurangan pada linked list. Operasi tranversal pada senarai berkait (linked list) memilik performa yang buruk.
4

Struktur data lain dapat digunakan sebagai pengganti senarai berkait. Misalnya dengan binary tree, kompleksitas terburuk bisa diturunkan menjadi O(log n) dari yang sebelumnya O(n). Namun demikian , karena setiap senarai diharapkan untuk tidak panjang h, struktur data binary tree kurang effisien kecuali table hash tersebut memang didesain untuk jumlah record yang banyak atau kemungkinan terjadi bentrokan sangat besar yang mungkin terjadi karena masukan memang disengaja agar terjadi bentrokan.

Gambar 1.3 contoh separate chaining Collisions Merupakan tabrakan data dimana jika didalam suatu data diisi sebuah data yang sama karena fungsi hash bukan merupakan fungsi satu ke satu. Dengan fungsi hash yang baik, hal seperti ini akan sangat jarang terjadi, tapi pasti akan terjadi. Jika hal seperti ini terjadi, record-record tersebut tidak bisa menempati lokasi yang sama. Sebagai ilustrasi , misal dalam suatu data terdapat seseorang bernama NED dengan table hash dari fungsi hash berrindeks N = 19, E = 5, dan D = 4 adalah 19+5+4 = indeks 28. Kemudian kita masukkan nama Fred yang memiliki indeks sama yaitu 28. Hal inilah yang akan mengakibatkan suatu tabrakan data atau collisions. 2.4.HASH TABEL WITHOUT LINKED LIST Berbeda dengan separate chaining, pada hash table tanpa linked list data disimpan di dalam hash table tersebut. Bukan senarai berkait yang bisa bertambah secara terus menerus. Dengan demikian data yang disimpan tidak mungkin bisa lebih banyak dari banyak ruang yang ada pada table hash. Jika suatu record akan dimasukkan ke dalam table hash pada lokasi sesuai nilai hash nya dan tenyata lokasi tersebut sudah diisi dengan record lain maka harus dicari lokasi alternative yang masih belum terisi dengan cara tertentu. Cara ini disebut dengan open addressing. Ada beberapa metode untuk menemukan lokasi baru yang masih kosong. Dalam proses menemukan lokasi baru ini harus menggunakan pola tertentu agar record yang disimpan tetap bisa dicari dengan mudah saat dibutuhkan kemudian. Metode metode yang sering digunakan adalah : 1. Linear Probing
5

Dengan menambahkan suatu interval pada hasil yang diperoleh dari fungsi hash sampai ditemukan lokasi yang belum terisi. Interval yang biasa digunakan adalah 1. Ilustrasi Resolusi bentrokan dengan Linear Probing:

Gambar 1.4 Metode Linear Probing 2. Kuadrat Probing Disebut juga dengan Squared Probing. Hampir sama dengan linear probing, hanya saja pada quadratic probing hasil yang diperoleh dari fungsi hash ditambahkan dengan kuadrat dari interval yang digunakan. 3. Double hashing Pada method double hashing, jika lokasi yang diperoleh dengan fungsi hash sudah terisi, maka dilakukan proses hash lagi sampai ditemukan lokasi yang belum terisi. 2.5. REHASHING Jika table sudah terlalu penuh, maka waktu yang dibutuhkan untuk memproses dan mengoperasikan data akan menjadi terlalu lama. Penempatan data mungkin gagal untuk membuka alamat hashing dengan resolusi kuadrat. Masalah ini dapat terjadi jika kepindahan data terlalu banyak yang bercampur dengan penyisipan data. Solusi untuk masalah ini adalah dengan membuat table lain yang memiliki ukuran sekitar dua kali lebih besar dari table hash sebelumnya dan dengan fungsi hash sama. Kemudian menye-can data table hash lama, menghitung nilai hash yang baru untuk setiap elemen yang tidak dihapus kemudian memasukkannya ke dalam table hash yang baru. Rehashing merupakan operasi yang memakan banyak waktu, yaitu O(N). hal ini dikarenakan terdapat N elemen yang harus di-rehash dan ukuran table sekitar 2N. Jika hashing dilakukan sebagai bagian dari system interaktif, maka operasi ini tidak akan menguntungkan karena akan memperlambat eksekusi program. Meskipun demikian, operasi rehashing sangat jarang terjadi sehingga tidak perlu terlalu dirisaukan. Rehashing menyerupai separate chaining hash table. Hal ini terbukti dari rehashing sederhana yang menyediakan implementasi dari separate chaining hash table. 2.6. HASH TABLE PADA PERPUSTAKAAN STANDAR Perpustakaan Standar mencakup implementasi dari Set dan Map, dengan nama HashSet dan HashMap. HashSet dan HashMap diimplementasikan dengan menggunakan separate chaining hash table. Item dalam HashSet (atau tombol di HashMap) harus menyediakan metode kode hash. Dalam hal ini terdapat 3 peta, yaitu:
6

1) Sebuah peta dimana kuncinya adalah panjang kata, dan nilainya adalah semua kata-kata yang menyusun panjang kata. 2) Sebuah peta dimana kuncinya adalah perwakilan, dan nilai adalah koleksi semua kata dengan perwakilan itu. 3) Sebuah peta dimana kuncinya adalah kata, dan nilai adalah koleksi semua kata-kata yang berbeda hanya dalam satu karakter dari kata itu. Karena urutan dari panjang kata yang diproses tidak bermasalah maka peta pertama bisa menjadi HashMap. Karena perwakilan tidak diperlukan setelah peta kedua dibangun, maka peta kedua bisa manjadi HashMap. Peta ketiga juga bisa menjadi HashMap, kecuali kita ingin printHighChangeables untuk abjad daftar subset dari kata-kata yang dapat diubah menjadi sejumlah besar kata lainnya. Kinerja HashMap cenderung lebih unggul dari TreeMap, namun sulit untuk mengetahui pasti tanpa menulis kode dua arah. Baik HashMap maupun TreeMap sama-sama baik untuk mendeklarasikan variable menggunakan interface type Map yang kemudian mengubah instansiasi dari TreeMap ke HashMap lalu melakukan tes waktu. Di java, jenis perpustakaan yang patut dimasukkan ke HashSet atau sebagai kunci ke dalam HashMap adalah sama, dan kode hash didefinisikan. 2.7.EXTENDIBLE HASHING Extendible hashing berkaitan dengan kasus dimana jumlah data terlalu besar untuk cocok di memori utama. Pertimbangan utama adalah jumlah akses disk yang dibutuhkan untuk mengambil data. Semisal kita asumsikan bahwa pada titik tertentu kita memiliki N catatan untuk menyimpan nilai N dari waktu ke waktu. Jika hashing probing atau hashing chaining separate yang digunakan bermasalah, maka akan terjadi tabrakan yang dapat menyebabkan beberapa blok diperiksa selama pencarian, bahkan untuk didistribusikan pada hash table. Sehingga memperpanjang waktu pencarian. 3. PENUTUP 3.1.KESIMPULAN Hasing adalah teknik untuk melakukan penambahan,penghapusan,dan pencarian dengan rata rata waktu konstan. Selain itu hashing juga dikenal dengan sebutan hash table. Hash tables adalah array dengan sel-sel yang ukurannya telah ditentukan dan dapat berisi data atau key yang berkesesuaian dengan data. Pada hakekatnya hash table merupakan solusi yang sangat effisien dalam mengatasi masalah pencarian pada sebuah data. Hal ini dikarenakan table hash seperti halnya hash Map menyimpan setiap pasangan kunci atau nilai dari setiap data. Array tidak dapat digunakan untuk menyimpan semua kunci pada hash table sehingga untuk mengatasi hal tersebut dalam menyimpan data pada sebuah array maka indeks pada array tidak sama dengan kunci melainkan indeks pada array dihitung dari kunci. Indeks array dari hasil perhitungan kunci disebut dengan kode hash. Sedangkan fungsi untuk menghitung kode hash disebut dengan fungsi hash. Fungsi hash merupakan fungsi yang menerima masukan string yang panjangnya sembarang, lalu mentransformasikannya menjadi string keluaran yang panjangnya tetap (fixed) (umumnya berukuran jauh lebih kecil daripada ukuran string semula). Separate chaining merupakan salah satu teknik untuk menyelesaikan permasalahan ketika terjadi collision dalam memori pada table. Collision merupakan tabrakan data dimana jika didalam suatu data diisi sebuah data yang sama karena fungsi hash bukan merupakan fungsi satu ke satu. Dengan fungsi hash yang baik, hal seperti ini akan sangat jarang terjadi, tapi pasti akan terjadi. Berbeda dengan separate chaining, pada hash table tanpa linked list data disimpan di dalam hash table tersebut. Dalam proses menemukan lokasi baru ini harus
7

menggunakan pola tertentu agar record yang disimpan tetap bisa dicari dengan mudah saat dibutuhkan kemudian. Metode metode yang sering digunakan adalah : 1. Linear Probing 2. Kuadrat Probing 3. Double hashing Terdapat pula rehashing yang merupakan metode untuk mengatasi masalah dalam pengolahan data dengan cara memindahkan data dari hash table lama ke hash table yang baru. Hash table sering digunakan untuk mengimplementasikan cache, baik dalam perangkat lunak (misalnya cache pada browser internet kita) dan perangkat keras (misalnya, memori cache komputer modern). Hash table juga digunakan dalam implementasi hardware dari router. Secara garis besar fungsi hash paling banyak digunakan dalam keamanan jaringan computer dan internet. 3.2.SARAN Makalah ini sangat jauh dari kesempurnaan, maka dari itu kelompok kami sangat mengharapkan kritik dan saran untuk makalah ini yang tentunya sangat bermanfaat bagi penulis dalam menyempurnakan makalah ini. Semoga makalah ini bias menjadi salah satu acuan dalam pembuatan makalah selanjutnya.

DAFTAR PUSTAKA Aprizal, Aries. 2009. Keamanan Komputer . http://unila.academia.edu/ariesaprizal/Papers/1589275/Keamanan_Komputer diakses tanggal 23 Mei 2012. Anonim. 2008. Virtual Consulting Knowledge Educational. http://www.ilmukomputer.com/ diakses tanggal 20 Mei 2012. Pratama,Junaedi.2009. Makalah Keamanan Komputer. http://www.informatika.org~rinaldiMatdis2007-2008MakalahMakalahIF2153-0708-061.pdf diakses tanggal 20 Mei 2012. Agus. 2008. Java Enkripsi. http://www.om4gus.blogspot.com/2008/02/java-enkripsimd5.html diakses tanggal 21 Mei 2012 Anonim. 2008. Kamus Internet Detail. http://www.telkom.net/kamus_internet_detail.php?cid=2&id=431 diakses tanggal 21 Mei 2012.