Anda di halaman 1dari 29

TABEL HASH

Kuliah Struktur Data


Sekolah Vokasi IPB

1
Permasalahan Penelusuran
• Andaikan kita menyimpan data pada sebuah list, maka biaya
komputasi penelusuran adalah
– Ketika data tidak terurut O(n)
– Jika terurut O(lg n)  dengan menerapkan binary search
• Bisakah kita peroleh kompleksitas yang lebih baik O(1) ?

2
Penelusuran Memory
• Umumnya data yang ditelusuri disimpan di memory
• Memory adalah array ukuran besar, ketika alamat memory sudah diketahui
maka secepat kilat kita langsung dapat sampai ke posisi tersebut
• Yang jadi masalah dalam penelusuran data kita tidak tahu di alamat mana data
disimpan

3
Hash secara Konseptual
• Suatu teknik pemetaaan dari domain key data kepada domain lokasi (alamat)
data disimpan

17345 Budi, Jakarta, L, 1982


18305 Doni, Jakarta, L, 1977
16347 ff27bcd ff01acf …
17045 Tina, Bandung, P, 1989 ff27bcd 16347 Chika …
ff35acf …
16347 Chika, Bogor, P, 1982
17849 Dino, Tasik, L, 1980 Hash fff5acf …

4
5
Apa itu Hash?
• Sebuah fungsi yang
– Memetakan objek kepada suatu nilai
• Objek yang sama memiliki pemetaan yang sama
• Objek berbeda memiliki pemetaan berbeda
– Umumnya searah
• Dengan hash, komputasi penelusuran tidak dengan trial secara sistematis isi
setiap alamat namun dengan menghitung alamat dari data yang kita ingin
cari

6
Contoh Hash yang Ideal
• Andaikan fungsi hash kita H(x)
• Pada kasus ini kita ingin menyimpan komoditas buah-buahan
yang diindeks dengan namanya 0 kiwi
• Katakan berikut hasil hashnya 1
2 banana
H(‘banana’)=2 H(‘mango’)=6
3 watermelon
H(‘coconut’)=7 H(‘strawberry’)=9
4
H(‘kiwi’)=0 H(‘watermelon’)=3 5 apple
H(‘grapes’)=8 6 mango
H(‘apple’)=2 7 coconut
• Ideal karena setiap objek di hash kepada nilai (lokasi) berbeda 8
grapes
9
strawberry

7
Keys Domain vs Address Domain

• Domain nilai antara keys dan alamat memory sangat berbeda


• Representasi alamat berupa unsigned int dalam hexadesimal ><
adapun keys sangat beragam
• Contoh keys:
– NRP, NIP, NIK, id pelanggan, kode barang
• Butuh suatu formulasi untuk pemetaan ini

8
Operasi Dasar Teknik Hashing
• Division
H(x)=x mod m H(2173) = 2173 mod 7 = 3

• Folding
H(x)=fold(x,k) fold(213701, 2)= 21 + 37 + 01 = 59

• Truncating
H(x)=Truncate(x,k) Truncate(21543, 2)=43

Tentunya semua operasi ini dapat dikombinasikan

9
Mencari Hash ideal itu sulit
• Operasi hash sebelumnya kiwi
0
H(‘banana’)=2 H(‘mango’)=6 1
H(‘coconut’)=7 H(‘strawberry’)=9 2 banana
3 watermelon
H(‘kiwi’)=0 H(‘watermelon’)=3
4
H(‘grapes’)=8 5 apple melon
H(‘apple’)=5 6 mango
7 coconut
• Bagaimana jika ada key baru ‘melon’ dengan 8
H(‘melon’)=5 ? grapes
9
strawberry
• Kondisi collision

10
Apakah collision itu sering terjadi?
• Birthday paradox: peluang dua orang (lebih) memiliki tanggal kelahiran sama
dari suatu group

11
Solusi dari Collision
• Collision besar kemungkinan akan terjadi
• Solusinya
– Hashing with bucket (separate chaining)
– Coelesced hashing
– Open addressing (Linier / nonlinier probing)
– Double hashing

12
Hashing with Bucket

13
Coalesced Hashing
• Bucket disatukan dengan tabel hash (bisa juga ada alokasi bagian tertentu pada
tabel hash)

14
Contoh lain Coalesced Hashing
• Misalkan urutan masuk adalah "qrj," "aty," "qur," "dim," "ofu," "gcl," "rhv," "clq," "ecd,"
"qsu“
• Kelemahan: dapat terjadi collision chaining

hasil hash terpetakan

15
Open Addressing (Linier Probing)
• Pada linier probing ketika ada collision H(x)’=H(x)+di. Nilai di disebut juga probing. berupa
konstanta. Biasanya di=1.
• Kelemahan cenderung membentuk clustering
• Untuk contoh di bawah ini di=-1.

16
Insertion, I
• Misalkan kita ingin menambahkan seagull ke ...
tabel hash (Linier probing di=1) 141
• seandainya:
142 robin
– hashCode(seagull) = 143
– table[143] tidak kosong 143 sparrow
– table[143] != seagull 144 hawk
– table[144] tidak kosong
145 seagull
– table[144] != seagull
– table[145] masih kosong 146
• Sehingga kita akan letakan seagull pada 147 bluejay
lokasi145 148 owl
...

17
Searching, I
• Seandainya kita ingin mencari seagull pada ...
tabel hash
141
• tahapannya:
– hashCode(seagull) = 143 142 robin
– table[143] tidak kosong 143 sparrow
– table[143] != seagull
– table[144] tidak kosong 144 hawk
– table[144] != seagull
145 seagull
– table[145] tidak kosong
– table[145] == seagull ! 146
• Kita dapat menemukan seagull pada lokasi 147 bluejay
145 148 owl
...

18
Searching, II
• Misalkan kita ingin mencari cow ...
• Tahapannnya adalah: 141
– hashCode(cow) = 144
– table[144] is not empty 142 robin
– table[144] != cow
143 sparrow
– table[145] is not empty
– table[145] != cow 144 hawk
– table[146] is empty
145 seagull
• sekiranya cow ada harusnya pada saat ini kita
menemukannya 146

• Kenyataannya belum, maka cow dijamin tidak 147 bluejay


ada 148 owl
...

19
Insertion, II
• Misalkan kita ingin menambahkan hawk ...
• Tahapannya 141
– hashCode(hawk) = 143
142 robin
– table[143] tidak kosong
– table[143] != hawk 143 sparrow
– table[144] tidak kosong
144 hawk
– table[144] == hawk
145 seagull
• hawk sudah ada maka penambahan jangan
dilakukan 146
147 bluejay
148 owl
...

20
Insertion, III
• misalkan: ...
– Ingin ditambahkan cardinal 141
hashCode(cardinal) = 147
142 robin
– The last location is 148
143 sparrow
– 147 and 148 are occupied
144 hawk
• Solusi:
145 seagull
– Pandang tabel berupa circular; setelah 148
146
adalah 0
147 bluejay
– Selanjutnya, cardinal akan diletakan pada 0
(or 1, or 2, or ...) 148 owl

21
Open Addresing (nonlinier probing)
• Probing (di) tidak konstan. Misalkan di=i. Perlu dicatat pada k kali pprobing
maka pergeseran adalah d1+d2+d3+ …+dk.
• Pada contoh di=-i

22
Double Hashing
• Pada teknik ini jika ada collision maka digunakan fungsi hashing lain untuk
menghitung probing (masih ada kemungkinan probing harus berkali-kali).

23
Pemanfaatan
• Indexing (database)
• Spell checker
• Message digest (MD5) untuk integritas data

24
• sekian

25
Sumber Gambar
• http://www.eps10.com/wp/wp-content/uploads/2012/07/Abstract-Colorful-Light-Vector-
Background.jpg
• Hashing bucket:
http://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Hash_table_5_0_1_1_1_1_0_LL.svg/128
0px-Hash_table_5_0_1_1_1_1_0_LL.svg.png
• Coallesced hashing : http://i.stack.imgur.com/diHhF.png
• Open adressing: Agus Buono, Modul Struktur Data Departemen Ilmu Komputer FMIPA IPB

26
Hash pada Python
• Gunakan struktur data Dictionary
• Contoh : pemetaan kode pos dan lokasi terkait
kode_pos = {16115:'Bubulak', 16113:'Curug Mekar',1664:'Semplak’}
rumah=kode_pos[16115]
• Cara lain menggunakan list
kode_pos_selainnya=[(16112,'Cilendek Timur'),(16111,'Menteng')]

27
• Fungsi untuk mendapatkan nilai
def get(map, key):
for item in kode_pos_selainnya:
if item[0] == key:
return item[1]
return None
• Fungsi pemetaan nilai ke suatu key
def set(map, key, value):
map.append((key, value))
rumah = get(kode_pos_selainnya, 16112)
print(rumah)
28
29

Anda mungkin juga menyukai