Materi Pertemuan 9 SD 1 - Hash

43
Pertemuan 9. Hash TI-FST-Universitas Sanata Dharma

Transcript of Materi Pertemuan 9 SD 1 - Hash

Page 1: Materi Pertemuan 9 SD 1 - Hash

Pertemuan 9. Hash

TI-FST-Universitas Sanata Dharma

Page 2: Materi Pertemuan 9 SD 1 - Hash

2

Tujuan

Mahasiswa memahami hash Mahasiswa mampu

mengimplementasikan proses hashing

Page 3: Materi Pertemuan 9 SD 1 - Hash

Problem

Sebuah universitas memiliki 10.000 data mahasiswa. Setiap mahasiswa memiliki 9 digit nomor mahasiswa. 2 digit untuk tahun masuk + 1 digit kode fakultas + 1 digit kode jurusan + 1 digit kode prodi + 1 digit kode jenjang + 3 digit nomor urut

Data mahasiswa tersebut disimpan dalam array. Bagaimana jika akan mencari data mahasiswa yang

sudah tersimpan. (pencarian dilakukan hanya dengan sekali langkah)

Page 4: Materi Pertemuan 9 SD 1 - Hash

Contoh 1

Name VAL ID

Al-Otaibi, Ziyad 1.73 985926

Al-Turki, Musab Ahmad Bakeer 1.60 970876

Al-Saegh, Radha Mahdi 1.58 980962

Al-Shahrani, Adel Saad 1.80 986074

Al-Awami, Louai Adnan Muhammad 1.73 970728

Al-Amer, Yousuf Jauwad 1.66 994593

Al-Helal, Husain Ali AbdulMohsen 1.70 996321

Data akan dimasukkan dalam hash table berukuran 13, sehingga kode id akan dikonversi menjadi nilai 0 hingga 12 menggunakan hash function

Page 5: Materi Pertemuan 9 SD 1 - Hash

Contoh 1

0 1 2 3 4 5 6 7 8 9 10 11 12

Hus

a in

You

s uf

Loua

i

Ziy

ad

Rad

ha

Mus

ab

Ade

l

Name ID hash(id) = id %13Al-Otaibi, Ziyad 985926 6Al-Turki, Musab Ahmad Bakeer 970876 10Al-Saegh, Radha Mahdi 980962 8Al-Shahrani, Adel Saad 986074 11Al-Awami, Louai Adnan Muhammad 970728 5Al-Amer, Yousuf Jauwad 994593 2Al-Helal, Husain Ali AbdulMohsen 996321 1

Page 6: Materi Pertemuan 9 SD 1 - Hash

Contoh 2

CatDogElephantFrogGrasshopperHippopotamusHorseCougarCoyoteZebra

□ Menggunakan nilai posisi huruf dari huruf pertama sebuah kata. (mulai dari 0)

□ Hash Table berukuran 26 (26 bucket)

Indeks 2cat

cougar

coyote

Indeks 7horse

hippopotamus

Page 7: Materi Pertemuan 9 SD 1 - Hash

Contoh 3

S101 bananas

S123 potatoes

S592 tomatoes

S199 plums

S102 apples

S213 pears

S541 peaches

S= 19

bucket 1

bucket 5

bucket 5

bucket 8

bucket 2

bucket 5

bucket 9

collision

Page 8: Materi Pertemuan 9 SD 1 - Hash

Contoh 4

Hash(key) = (2 * int(key) modulus 10)

Cat

Dog

Elephant

Frog

(2* (3+1+20)) % 10 = 48 % 10 = 8

(2*(4+15+7)) % 10 = 52 % 10 = 2

(2*(5+12+5+16+8+1+14+20) )% 10 = 162 % 10 = 2

(2*(6+18+15+7)) % 10 = 92 % 10 = 2

Page 9: Materi Pertemuan 9 SD 1 - Hash

Hash Tables

Hash Table adalah array satu dimensi dengan nilai indeksnya merupakan hasil fungsi dari data yang akan dimasukkan dalam array pada posisi indeks tersebut.

Fungsi yang digunakan disebut dengan Hash Function Penggunaan hash akan menyebabkan data dengan

jangkauan /range yang luas akan menjadi data dengan range yang lebih sedikit.

Untuk menyisipkan atau mencari data, maka diperlukan key dari setiap data untuk diolah dengan hash function -> operasi insert dan search akan menjadi cepat.

Page 10: Materi Pertemuan 9 SD 1 - Hash

Hash Functions

Hash function, h, adalah fungsi yang mengubah key K ke dalam indeks dalam tabel/array berukuran n:

h: K -> {0, 1, ..., n-2, n-1} Sebuah key dapat angka, string atau yang lain.

Page 11: Materi Pertemuan 9 SD 1 - Hash

Collision

Key yang berbeda dapat berada dalam lokasi / indeks yang sama.

Hal ini disebut collision dan key yang ber- colliding disebut synonyms.

Collision susah dihindari jika kita tidak memiliki pengetahuan sebelumnya tentang key yang ada.

Usaha / prosedur untuk memecahkan masalah yang timbul akibat collision disebut collision resolution

Page 12: Materi Pertemuan 9 SD 1 - Hash

Load Factor

Load factor dari hash table adalah rasio jumlah key yang digunakan dengan ukuran hash table.

Load factor lebih dari 1.0, maka kemungkinan collision bertambah

Page 13: Materi Pertemuan 9 SD 1 - Hash

Faktor yang mempengaruhi unjuk kerja Hash

Pemilihan fungsi hash Strategi Collision resolution Load Factor

Page 14: Materi Pertemuan 9 SD 1 - Hash

Sifat Hash Function

Hash function yang bagus : Collision minimal. Mudah dan cepat menghitung. Mendistribusikan nilai key secara merata dalam

hash table. Menggunakan semua key untuk menghasilkan

nilai hash. Menghasilkan nilai yang sangat berbeda untuk

keys yang sama.

Page 15: Materi Pertemuan 9 SD 1 - Hash

Metode Hash Function

Sisa hasil bagi bilangan prima Pemotongan /ekstraksi Lipatan / folding Konversi radiks Mid-square

Page 16: Materi Pertemuan 9 SD 1 - Hash

Sisa Hasil Bagi Bilangan Prima

Menghitung nilai hash dari key yang ada menggunakan operator modulo (%).

Ukuran tabel yang merupakan nilai pangkat n dari 2 sebaiknya dihindari, karena akan menyebabkan collision yang semakin besar.

Nilai pangkat dari 10 juga dihindari menjadi ukuran tabel jika key merupakan nilai integer desimal.

Bilangan prima yang tidak mendekati pangkat dari 2 adalah ukuran tabel yang lebih baik.

Metode ini akan semakin baik jika digabungkan dengan pemotongan atau lipatan.

Page 17: Materi Pertemuan 9 SD 1 - Hash

Pemotongan /ekstraksi Mendasarkan pada distribusi digit atau karakter

dalam key. Mengambil digit pada posisi tertentu secara merata.

Misal :

Phone no index

731-3018 338

539-2309 329

428-1397 217 Cepat, tetapi distribusi digit mungkin tidak sama.

Page 18: Materi Pertemuan 9 SD 1 - Hash

Lipatan Membagi key menjadi 2 atau lebih kemudian

menggabungkan bagian tersebut untuk membuat alamat hash.

Untuk memetakan key 25936715 ke range 0 - 9999, maka : pecah angka menjadi 2 : 2593 dan 6715 tambahkan dua nilai tersebut menjadi 9308

Bagus jika key sangat besar Cepat dan sederhana khususnya untuk pola bit. Kemampuan yang bagus untuk mengubah key

non-integer menjadi integer.

Page 19: Materi Pertemuan 9 SD 1 - Hash

Konversi Radiks Mengubah key ke bilangan dengan basis lain untuk

mendapatkan nilai hash BIasanya menggunakan basis bilangan selain basis

2 dan basis 10. Memetakan key 38652 dalam range 0 – 9999

menggunakan basis 11

3x114 + 8x113 + 6x112 + 5x111 + 2x110 = 5535411

Bilangan tersebut kemudian dipotong sehingga berada dalam range 0 – 9999 menjadi 5354.

Page 20: Materi Pertemuan 9 SD 1 - Hash

Mid-Square Key di kwadrat dan nilai tengah dari hasil

diambil sebagai nilai hash. Contoh : key 3121 dimasukkan dalam hash

table ukuran 1000, maka : 31212 = 9740641 dan mengambil nilai 406 sebagai nilai hash

Efisien jika menggunakan hash table ukuran pangkat dari bilangan 2

Tidak digunakan jika key banyak mengandung nilai 0.

Page 21: Materi Pertemuan 9 SD 1 - Hash

Teknik Collision Resolution

1. Separate Chaining : implementasi menggunakan linked list.

2. Open Addressing: implementasi menggunakan array.1. Linear probing (linear search)

2. Quadratic probing (nonlinear search)

3. Double hashing (Rehashing)

4. Random increments/decrements

3. Buckets methods: Kombinasi (1) dan (2)

Page 22: Materi Pertemuan 9 SD 1 - Hash

Separate Chaining

Hash table di implementasikan sebagai array of linked lists.

Menyisipkan item, r, pada indeks i sama seperti menyisipkan ke dalam linked list pada posisi i.

Key yang sinonim akan di hubungkan dalam linked list yang sama.

Memperoleh item, r, dengan alamat hash, i, sama dengan mendapatkan item pada linked list posisi i.

Begitu juga dengan menghapus.

Page 23: Materi Pertemuan 9 SD 1 - Hash

Separate Chaining

Menggunakan fungsi h(x)= x % 15 Setiap elemen array menjadi kepala dari

rantai linked list.

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 47 65 36 129 25 2501 35

Bgm menyimpan 29, 16, 14, 99, 127 ?

Page 24: Materi Pertemuan 9 SD 1 - Hash

Separate Chaining

Menyimpan 29, 16, 14, 99, 127

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 47 65 36 127 99 25 2501 14 35 129 29

Page 25: Materi Pertemuan 9 SD 1 - Hash

Kelemahan Separate Chaining

Sebagian array tidak pernah terpakai. Jika rantai yang terbentuk panjang maka

proses pencarian juga lama. Membuat node baru juga membutuhkan

waktu

Page 26: Materi Pertemuan 9 SD 1 - Hash

Linear Probing Key x disimpan dengan fungsi linear biasa f(x)=t

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 47 35 36 129 25 2501 65(?)

Bgm jika terjadi collision ?Jika hash table tidak full, simpan key dalam posisi array

sesudahnya (kasus ini : (t+1)%15, (t+2)%15, (t+3)%15 …)

Sampai ditemukan tempat kosong.

Page 27: Materi Pertemuan 9 SD 1 - Hash

Linear Probing

Dimana menyimpan 65 ?

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 47 35 36 65 129 25 2501 percobaan

Bagaimana dengan 29, 16?

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 47 35 36 65 129 25 2501 29

Page 28: Materi Pertemuan 9 SD 1 - Hash

Linear Probing

Bagaimana dengan 14, 99 ? 0 1 2 3 4 5 6 7 8 9 10 11 12 13 1414 16 47 35 36 65 129 25 2501 29

0 1 2 3 4 5 6 7 8 9 10 11 12 13 1414 16 47 35 36 65 129 25 2501 99 29

Page 29: Materi Pertemuan 9 SD 1 - Hash

Linear Probing

Menyelesaikan masalah pada separate chain (banyak tempat kosong dan biaya membangun node baru)

Muncul masalah baru : pengelompokan. Data cenderung mengelompok dalam interval tertentu.

Muncul masalah efisiensi pencarian. Menghapus menjadi susah….

Page 30: Materi Pertemuan 9 SD 1 - Hash

Masalah menghapus

0123456789

H=KEY MOD 10 Insert 47, 57, 68, 18,

67 Find 68 Find 10 Delete 47 Find 57

Page 31: Materi Pertemuan 9 SD 1 - Hash

Quadratic Probing

Key x disimpan dengan fungsi hash f(x)=t

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 47 35 36 129 25 2501 65(?)

Bagaimana jika terjadi collision?Jika hash table tidak full, simpanlah key dalam

array ke : (t+12)%N, (t+22)%N, (t+32)%N …sampai ditemukan tempat kosong.

Page 32: Materi Pertemuan 9 SD 1 - Hash

Quadratic Probing

Dimana menyimpan 65 ? f(65)=t=5

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 47 35 36 129 25 2501 65 t t+1 t+4 t+9

Dimana menyimpan 29?

0 1 2 3 4 5 6 7 8 9 10 11 12 13 1429 47 35 36 129 25 2501 65 t+1 t

Page 33: Materi Pertemuan 9 SD 1 - Hash

Quadratic Probing

Bgm dng 16? 0 1 2 3 4 5 6 7 8 9 10 11 12 13 1429 16 47 35 36 129 25 2501 65 t

Dimana menyimpan 14?

0 1 2 3 4 5 6 7 8 9 10 11 12 13 1429 16 47 14 35 36 129 25 2501 65 t+1 t+4 t

Page 34: Materi Pertemuan 9 SD 1 - Hash

Quadratic Probing

99?

0 1 2 3 4 5 6 7 8 9 10 11 12 13 1429 16 47 14 35 36 129 25 2501 99 65 t t+1 t+4

127 ?0 1 2 3 4 5 6 7 8 9 10 11 12 13 1429 16 47 14 35 36 127 129 25 2501 99 65 t

Page 35: Materi Pertemuan 9 SD 1 - Hash

Quadratic Probing

Key terdistribusi dengan lebih baik Mengurangi masalah pengelompokan Terdapat resiko loop yang tidakterbatas

saat proses menyisipkan. Misal : sisip key 16 ke dlm array ukuran

16, dengan posisi 0, 1, 4 dan 9 sudah digunakan.

Sehingga, ukuran tabel harus prima.

Page 36: Materi Pertemuan 9 SD 1 - Hash

Double Hashing Menggunakan fungsi hash untuk

pengurangan nilai Hash(key, i) = H1(key) – (H2(key) * i)

Pengurangan merupakan fungsi dari key Slot yang dikunjungi dengan fungsi hash akan

bervariasi meskipun nilai awal slot sama Menghindari pengelompokan

Secara teoritis benar, tetapi dalam praktek lebih lambat dari quadratic probing, sebab perlu melakukan evaluasi dengan fungsi hash kedua.

Page 37: Materi Pertemuan 9 SD 1 - Hash

Double Hashing

Key x disimpan dalam array dengan fungsi f(x)=t

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 47 35 36 129 25 2501 65(?)

Bgm jika terjadi collision?Tentukan fungsi hash kedua f2(x)=d. Simpan key

dalam array ke (t+d)%N, (t+2d)%N, (t+3d)%N … sampai ditemukan slot kosong.

Page 38: Materi Pertemuan 9 SD 1 - Hash

Double Hashing Fungsi hash kedua yang biasa digunakan

f2(x)=R − ( x % R )

Dengan R adalah bilangan prima, R < N

Page 39: Materi Pertemuan 9 SD 1 - Hash

Double Hashing

Dimana menyimpan 65 ? f(65)=t=5 f2(x)= 11 − (x % 11) f2(65)=d=1Cat: R=11, N=15

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 47 35 36 65 129 25 2501 t t+1 t+2

Page 40: Materi Pertemuan 9 SD 1 - Hash

Double Hashing

Dimana menyimpan 29?f2(x)= 11 − (x % 11) f2(29)=d=4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 47 35 36 65 129 25 2501 29 t

Bagaimana dengan 16?f2(x)= 11 − (x % 11) f2(16)=d=6

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 47 35 36 65 129 25 2501 29 t

Page 41: Materi Pertemuan 9 SD 1 - Hash

Double Hashing

Dimana menyimpan 14f2(x)= 11 − (x % 11) f2(14)=d=8

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 14 16 47 35 36 65 129 25 2501 29 t+16 t+8 t

Dimana 99?Let f2(x)= 11 − (x % 11) f2(99)=d=11

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 14 16 47 35 36 65 129 25 2501 99 29 t+22 t+11 t t+33

Page 42: Materi Pertemuan 9 SD 1 - Hash

Double HashingDimana menyimpan 127Let f2(x)= 11 − (x % 11) f2(127)=d=5

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 14 16 47 35 36 65 129 25 2501 99 29 t+10 t t+5

Infinite loop!

Page 43: Materi Pertemuan 9 SD 1 - Hash

Bahan Diskusi display_Table(): void hash_Function(int) : int insert(DataItem item) : void delete(int key) : DataItem find(int key) : DataItem