You are on page 1of 21

1

Hashing
© Sekolah Tinggi Teknik Surabaya
Menampung
seluruh jenis
Collection data

Unik Dictionary
List Set
Index

HashSet
Stack Associative

Queue SortedSet

Linked
List
2

© Sekolah Tinggi Teknik Surabaya


» 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.
3

© Sekolah Tinggi Teknik Surabaya


- Basic Hash Function (Horner’s Method)
h(Key) = Key mod M
dimana M adalah ukuran array
Contoh:
Key = abcd
M = 101

Binary 0110 0001 0110 0010 0110 0011 0110 0100


Hex 6 1 6 2 6 3 6 4
Ascii a b c d

256 x 0 + 97 = 97 mod 101 = 97


256 x 97 + 98 = 24930 mod 101 = 84
256 x 84 + 99 = 21603 mod 101 = 90 4
256 x 90 + 100 = 23140 mod 101 = 11
© Sekolah Tinggi Teknik Surabaya
#horner’s method

int hash(char *v, int M){


int h;
int a=256;
h = 0;
for (; *v!='\0'; v++){
h=(a * h + *v) % M;
}
return h;
}

256 x 0 + 97 = 97 mod 101 = 97


256 x 97 + 98 = 24930 mod 101 = 84
256 x 84 + 99 = 21603 mod 101 = 90
256 x 90 + 100 = 23140 mod 101 = 11 5

© Sekolah Tinggi Teknik Surabaya


Dengan pendekatan yang sama maka:

abcd
Hashed 11

dcba
Hashed 57

abbc
Hashed 57
6

© Sekolah Tinggi Teknik Surabaya


» 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
7
• Complex collision patterns
© Sekolah Tinggi Teknik Surabaya
Oleh H. P. Luhn,
seorang insinyur IBM, di Januari 1953.

Contoh:
Key A S E A R C H I N G E X A M P L E

Hash (Key) 1 8 5 1 7 3 8 9 3 7 5 2 1 2 5 1 5

Dengan M = 10
0 1 2 3 4 5 6 7 8 9 10
Maka Hash Map mulai
= L M N = E = G H I = dari 0 hingga M-1
A X C P R S =

A = = E = =

A E

= =
8

© Sekolah Tinggi Teknik Surabaya


Cara menentukan M yang optimal:
Metode ini tidak dapat menentukan berapa 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. 9

© Sekolah Tinggi Teknik Surabaya


Gambarkan kondisi Hash Map saat terjadi collision untuk
menyimpan deretan key berikut ini jika M = 8!

Key S I M P L E T A S K

Hash (Key) 7 3 5 7 5 3 7 1 7 4

10

© Sekolah Tinggi Teknik Surabaya


» 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
11
• Complex collision patterns
© Sekolah Tinggi Teknik Surabaya
» 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

12

© Sekolah Tinggi Teknik Surabaya


» Sehingga urutan Probing :
0th probe = h(key) mod M
1st probe = (h(key) + 1) mod M
2nd probe = (h(key) + 2) mod M
3rd 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 13

© Sekolah Tinggi Teknik Surabaya


» Merupakan pendekatan lain dari Linear Probing

» Urutan Probing:
0th probe = h(key) mod M
1st probe = (h(key) + 1) mod M
2nd probe = (h(key) + 4) mod M
3rd probe = (h(key) + 9) mod M
dst

14

© Sekolah Tinggi Teknik Surabaya


» Dengan menggunakan Quadratic Probing, lakukan
hashing untuk deretan h(key) berikut ini. (M = 10)

» Insert:
89
18
49
58
79

15

© Sekolah Tinggi Teknik Surabaya


» Menggunakan 2 metode Hashing
» Jika h(key) adalah hashing 1,
maka g(key) adalah hashing 2
» Sehingga:
0th probe = h(key) mod M
1st probe = (h(key) + g(key)) mod M
2nd probe = (h(key) + 2*g(key)) mod M
3rd probe = (h(key) + 3*g(key)) mod M
dst
» Jika:
h(key) = key mod M
g(key) = R – (key mod R)
16
dimana R < M
© Sekolah Tinggi Teknik Surabaya
Insert(76) Insert(93) Insert(40) Insert(47) Insert (10) Insert(55)
76%7 = 6 93%7 = 2 40%7 = 5 47%7 = 5 10%7 = 3 55%7 = 6
5-(47%5) = 3 5-(55%5) = 5

1 47 47 47

2 93 93 93 93 93

3 10 10

4 55

5 40 40 40 40

6 76 76 76 76 76 76

17

© Sekolah Tinggi Teknik Surabaya


Open Hashing = Separate Chaining
Close Hashing = Open Addressing

18

© Sekolah Tinggi Teknik Surabaya


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");

19

© Sekolah Tinggi Teknik Surabaya


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]);
}
20

© Sekolah Tinggi Teknik Surabaya


» http://courses.cs.washington.edu/courses/cse326/06
su/lectures/lecture11.pdf
» http://www.cs.princeton.edu/courses/archive/spr03/
cs226/lectures/hashing.4up.pdf
» http://en.wikipedia.org/wiki/Hash_table

21

© Sekolah Tinggi Teknik Surabaya