Hashing Eka, Erick, Reddy Data Structure Hashing Eka, Erick, Reddy © Sekolah Tinggi Teknik Surabaya
Menampung seluruh jenis data Collection Unik Dictionary List Set Index Associative HashSet Stack SortedSet Queue LinkedList © Sekolah Tinggi Teknik Surabaya
Hash Table Juga disebut sebagai Hash Map Mengimplementasikan associative array Pengindexannya menggunakan Hash Function Pengindexan dimaksudkan untuk menemukan lokasi memori (slot) yang dapat digunakan untuk meletakan pasangan key dan value dari sebuah Hash Map. Idealnya, sebuah Hash Function akan mengembalikan sebuah alamat memori yang unik. Tapi ada kalanya hasil sebuah Hash Function mengembalikan sebuah nilai (slot) yang telah ditempati. Kondisi ini disebut sebagai Hash Collisions. © Sekolah Tinggi Teknik Surabaya
Hashing Basic Hash Function (Horner’s Method) h(Key) = Key mod M dimana M adalah ukuran array Contoh: Key = abcd M = 101 256 x 97 + 98 = 24930 mod 101 = 84 256 x 84 + 99 = 21603 mod 101 = 90 256 x 90 + 100 = 21603 mod 101 = 11 Binary 0110 0001 0110 0010 0110 0011 0110 0100 Hex 6 1 6 2 6 3 4 Ascii a b c d © Sekolah Tinggi Teknik Surabaya
hash.c int hash(char *v, int M){ int h; int a=117; for (h=0; *v!='\0'; v++){ h=(a * h + *v) % M; } return h; Pikirkan bagaimana untuk menghasilkan hash dari sebuah key sepanjang N ! © Sekolah Tinggi Teknik Surabaya
Collision Dengan pendekatan yang sama maka: abcd Hashed 11 dcba Hashed 57 abbc © Sekolah Tinggi Teknik Surabaya
Collision Resolution Separate Chaining M jauh lebih kecil dari N ~ N/M keys per table position Letakan key yang bertabrakan dalam list Perlu melakukan pencarian Open Addressing (linear probing, double hashing) M jauh lebih besar dari N Banyak slot kosong Ketika key yang baru bertabrakan, temukan slot kosong Complex collision patterns © Sekolah Tinggi Teknik Surabaya
Separate Chaining Oleh H. P. Luhn, seorang insinyur IBM, di Januari 1953. Contoh: Dengan M = 10 Maka Hash Map mulai dari 0 hingga M-1 Key A S E R C H I N G X M P L Hash (Key) 1 8 5 7 3 9 2 1 2 3 4 5 6 7 8 9 10 = L M N E G H I A X C P R S Ide: Hasil Hash dari sebuah key yang menunjuk pada sebuah alamat yang sama, akan disimpan dalam sebuah list yang terpasang pada alamat yang ditunjuk. © Sekolah Tinggi Teknik Surabaya
Separate Chaining (cont) Cara menentukan M yang optimal: Metode ini tidak dapat menentukan berpa besar alokasi memori yang harus disediakan di awal. Biasanya mempertimbangkan ketersediaan memori. Disarankan tidak terlalu besar untuk efisiensi pencarian. Alokasi yang kecil menyebabkan persebarannya berdekatan. Efisiensi pencarian (sequencial). Biasanya besar M di antara kisaran N/10 hingga sama dengan atau mendekati nilai N. © Sekolah Tinggi Teknik Surabaya
Contoh Soal Latihan: Gambarkan kondisi Hash Map saat terjadi collision untuk menyimpan deretan key berikut ini jika panjang table-nya adalah 7! Key S I M P L E T A K Hash (Key) 7 3 5 1 4 © Sekolah Tinggi Teknik Surabaya
Linear Probing Logikanya: Setelah melakukan pemeriksaan pada lokasi h(key), jika penuh maka coba untuk h(key) + 1, jika penuh maka coba untuk h(key) + 2, jika penuh maka coba untuk h(key) + 3 dst © Sekolah Tinggi Teknik Surabaya
Linear Probing (cont) Sehingga urutan Probing : dst Pertimbangan: 0th probe = h(key) mod M 1th probe = (h(key) + 1) mod M 2th probe = (h(key) + 2) mod M 3th probe = (h(key) + 3) mod M dst Pertimbangan: M terlalu besar, akan banyak lokasi yang kosong M terlalu kecil, akan tergabung (clusters coalesce) Biasanya M berkisar antara 2N © Sekolah Tinggi Teknik Surabaya
Quadratic Probing dst Merupakan pendekatan lain dari Linear Probing Urutan Probing: 0th probe = h(key) mod M 1th probe = (h(key) + 1) mod M 2th probe = (h(key) + 4) mod M 3th probe = (h(key) + 9) mod M dst x © Sekolah Tinggi Teknik Surabaya
Latihan! Dengan menggunakan Quadratic Probing, lakukan hashing untuk deretan key berikut ini. (M = 10) Insert: 89 18 49 58 79 © Sekolah Tinggi Teknik Surabaya
Double Hashing Menggunakan 2 metode Hashing Jika h(key) adalah hashing 1, maka g(key) adalah hashing 2 Sehingga: 0th probe = h(key) mod M 1th probe = (h(key) + g(key)) mod M 2th probe = (h(key) + 2*g(key)) mod M 3th probe = (h(key) + 3*g(key)) mod M dst Jika: h(key) = key mod M g(key) = R – (key mod R) dimana R < M © Sekolah Tinggi Teknik Surabaya
Contoh 1 47 2 93 3 10 4 55 5 40 6 76 Insert(76) 76%7 = 6 Insert(93) 93%7 = 2 Insert(40) 40%7 = 5 Insert(47) 47%7 = 5 5-(47%5) = 3 Insert (10) 10%7 = 3 Insert(55) 55%7 = 6 5-(55%5) = 5 1 47 2 93 3 10 4 55 5 40 6 76 © Sekolah Tinggi Teknik Surabaya
Open Hashing = Separate Chaining Close Hashing = Open Addressing Penggunaan Istilah! Open Hashing = Separate Chaining Close Hashing = Open Addressing © Sekolah Tinggi Teknik Surabaya
Cara Penggunaan dalam C# Hashtable ht = new Hashtable(); ht.Add("001", "Zara Ali"); ht.Add("002", "Abida Rehman"); ht.Add("003", "Joe Holzner"); ht.Add("004", "Mausam Benazir Nur"); ht.Add("005", "M. Amlan"); ht.Add("006", "M. Arif"); ht.Add("007", "Ritesh Saikia"); © Sekolah Tinggi Teknik Surabaya
continue if (ht.ContainsValue("Nuha Ali")) { Console.WriteLine("This student is already exist"); } else { ht.Add("008", "Nuha Ali"); } // Get a collection of the keys. ICollection key = ht.Keys; foreach (string k in key) { Console.WriteLine(k + ": " + ht[k]); © Sekolah Tinggi Teknik Surabaya
Sumber http://courses.cs.washington.edu/courses/cse326/06su/lectures/lecture11.pdf http://www.cs.princeton.edu/courses/archive/spr03/cs226/lectures/hashing.4up.pdf http://en.wikipedia.org/wiki/Hash_table © Sekolah Tinggi Teknik Surabaya