P14 Hash Function TIF42/SIF42 Prodi teknik Informatika & Prodi Sistem Informasi Fakultas Teknologi Informasi Universitas Mercu Buana Yogyakarta 1 Pembahasan • • • • Pengenalan Tabel Hash Memilih Fungsi Hash Menangani Tabrakan Dalam Tabel Hash Linear Aplikasi Hash 2 Pengenalan Hashing • Alamat hash -> fungsi yg digunakan untuk menerjemahkan suatu nilai kunci menjadi suatu nilai • Alamat hash inilah yg menyatakan indeks lokasi dalam array 3 Key = 12320 Hash Function Key Mod 97 Tabel hash 12320 0 1 2 3 95 96 4 • Hashing -> Teknik yg memungkinkan lokasi suatu record dapat diperoleh dengan mudah dan cepat melalui fungsi hash • Tabel Hash -> Array yg digunakan untuk menyimpan data dengan cara hashing 5 Memilih Fungsi Hash • Kriteria : – Komputasi harus mudah dan cepat – Harus menghasilkan nilai tersebar sepanjang jangkauan indeks array Mod Metode Cut Folding F Hash 6 Mod (Sisa Pembagian) Konsep : • Membagi nilai kunci (Ex : NIP -> data Pegawai) dengan suatu nilai dan hasil MOD ini yg digunakan sebagai alamat hash H(k) = k mod m, m > 1 Dimana : - k -> kunci - m -> bilangan pembagi - n -> jumlah data Mengingat : • • k mod m -> menghasilkan bilangan 0 ... m-1 maka apabila lokasi memori (indeks array) berawal dengan 1, hasil pembagian perlu ditambah 1 H(k) = (k mod m) + 1 F Hash 7 • contoh tabel hash: mod 10 Indeks NIP Nama 0 55520 Andi 1 55521 Beta 2 55522 Citra 3 55523 Deny 4 55524 Emy 5 55525 Fadli 6 55526 Gunawan 7 55527 Hanif 8 55528 Indri 9 55529 Jeni 8 N = 12 30 mod N = 6 -> menghasilkan 2 sisa 6 40 mod N = 4 -> menghasilkan 3 sisa 4 50 mod N = 2 -> menghasilkan 4 sisa 2 60 mod N = 0 -> menghasilkan 5 sisa 0 9 Cut (Pemotongan) • dilakukan dengan : – mengabaikan bagian-bagian tertentu dalam kunci, dan – menggunakan yg tersisa sebagai indeks untuk mengakses data dalam tabel hash • Misalkan : – ukuran tabel hash = 1000 – agar indeks ada di jangkauan 0 ... 999 -> suatu bilangan akan diatur agar panjang terdiri atas 3 digit F Hash 10 Ketentuan : diambil digit ke 2, 5 dan 6 – Ex : 4 9 6 9 7 1 1 6 6 Kelebihan : sangat cepat dalam melakukan komutasi Kelemahan : kunci yang tidak terdistribusi secara merata 11 Folding (Pelipatan) • kunci dibagi menjadi beberapa bagian (misal : per 2 digit dan kemudian dijumlahkan) • hasilnya bisa dipotong sehingga masuk jangkauan indeks dalam tabel hash F Hash 12 Contoh fungsi hash dengan Holding Kunci 496716 527133 527155 k1, k2, k3 (per 2 digit) 49, 67, 16 52, 71, 33 52, 71, 55 H(k)= k1+k2+k3 49+67+16 = 132 52+71+33 = 156 52+71+55 = 178 H(k)=pemotongan hanya pada 2 32 digit terakhir dari k1+k2+k3 56 78 13 Tabrakan dalam Tabel Hash Berdasarkan 3 metode (mod, cut, hoding) -> ada kemungkinan menimbulkan 2 buah kunci atau bahkan lebih diterjemaahkan oleh fungsi hash ke dalam nilai sama Situasi yg membuat beberapa kunci memiliki alamat hash yg sama disebut tabrakan hash (hash collision) Pengalamatan Terbuka Penanganan Tabrakan Pembentukan Rantai Pengalamatan Buket Tabr 14 Terjadi tabrakan 0 hash 2 1 3 12 mod 10 4 5 22 mod 10 6 7 Contoh tabrakan hash 8 9 15 Pengalamatan terbuka • semua elemen disimpan dalam tabel hash • Penanganan : – mencari lokasi terdekat yg masih kosong Tabr 16 Kosong Kunci (k) Alamat hash k mod 10 279 0 111 1 2 433 3 434 4 Alamat hash 3 -> 433 Data = 463 maka Alamat hash = 3 5 316 6 7 518 8 9 17 Tempat 463 Kunci (k) Alamat hash k mod 10 279 0 111 1 2 433 3 434 4 Kunci 463 hash 3 cara mencari ruang kosong -> pemeriksaan linear (linear probing) 5 316 6 7 518 8 9 pencarian indeks dimulai dari indeks 3 sampai ditemukan lokasi yg kosong (indeks = 5) 18 Pembentukan rantai • data dalam tabel hash dibentuk secara dinamis dengan menggunakan senarai berantai • Contoh : – data pegawai yg bersisi NIP dan Nama Alamat Hash NIP 0 279 Andi 1 111 Beta 3 433 Deny 4 434 Emy 316 Gunawan 518 Indri Nama 2 5 6 7 8 9 Tabr 19 521 Mod 10 = 1 0 1 2 3 4 5 6 7 8 9 Ex : Data akan masuk NIP = 521 Nama = Jeni 279 Andi Nil 111 Beta 433 Deny Nil 434 Emy Nil 521 Jeni Nil Nil Nil 316 Gunawan Nil Maka : Data baru akan diletakkan di dalam node dalam senarai berantai yg ditunjuk oleh node yg berisi NIM = 111 Nil 518 Indri Nil Nil Tabrakan 20 Pengalamatan Buket • menggunakan cara mirip dengan pembentukan rantai • Penanganan : – tabrakan tidak ditangani dengan senarai berantai, melainkan dengan array • buket -> sebuah blok ruang yg cukup untuk menampung sejumlah data yg mempunyai alamat hash sama Tabr 21 Pemasukan : A1, A5, B1, B3, A3, A1 0 1 2 3 4 5 6 7 8 9 A1 A2 A3 A5 B1 B3 Pemasukan berikutnya : C1, D1, E1, F1, C3 C1 C3 D1 E1 F1 sebuah buket Maka : Jika sebuah buket penuh, • buket lain akan diciptakan untuk menampung data baru yg mengalami tabrakan, dan • sebuah petunjuk digunakan untuk memelihara hubungan antara buket yg penuh dan yg baru 22 Silahkan Coba Program Berikut • • • • Project Name = HashLinear Header File Name = HashLin.h Other Class File Name = HashLin.cpp Main Class File Name = main.cpp 23 Header File (HashLin.h) 24 Other Class (HashLin.cpp) 25 26 27 28 29 Main Class (main.cpp) 30 Hasil 31 Referensi • Munir. Rinaldi, “Algoritma & Pemrograman Dalam Bahasa Pascal dan C”, 2007, Bandung : Penerbit Informatika. • Utami, E., Raharjo, S., Sukrisno, "Struktur Data Konsep & Implementasinya Dalam Bahasa C & Free Pascal di GNU/Linux", 2007, Yogyakarta : Graha Ilmu. • Sianipar, R.H., Wiryajati, I.K., Mangiri, H.S., "Pemrograman & Struktur Data C", 2013, Bandung : Penerbit Informatika. • Hasbi, M., "Struktur Data dan Algoritma Dalam Pemrograman Turbo Pascal", 2003, Yogyakarta : Gava Media. 32 33 Agenda UAS • Mohon dipelajari kembali Materi setelah UTS "P9 - Queue" s/d "P14 - Hash Function" • Sifat : – Essay – Close All 34 Thanks 4 Participating in My Class C U Next Week SQ - http://sidiq.mercubuana-yogya.ac.id - [email protected] 35