Anda di halaman 1dari 25

11: Hash Table

Struktur Data (TI0133) – Semester Gasal 2021/2022

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Agenda
• Hash Table dan Fungsi Hash
• Collision Resolution

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Dictionary
• Pada Python, Dictionary adalah tipe data yang dapat digunakan untuk
menyimpan pasangan key-value

Kode Nama Prodi data = {


71 Informatika 71:'Informatika',
72:'Sistem Informasi',
72 Sistem Informasi 41:'Kedokteran',
41 Kedokteran 11:'Manajemen'
11 Manajemen }

Key
Value

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Dictionary
• Untuk mengakses suatu value, harus menggunakan key
Key = 71
data = {
71:'Informatika',
72:'Sistem Informasi', data[71]
41:'Kedokteran',
11:'Manajemen'
} ‘Informatika’

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Hash Table
• Pengaksesan data pada Dictionary sangat cepat, karena implementasinya
berdasarkan hash table.
• Nilai dari data disimpan dalam list / array yang dapat diakses menggunakan
index-nya.
• Linear search dan Binary search melakukan pencarian karena tidak mengetahui
index dari data yang dicari
• Pengaksesan data akan lebih cepat jika diketahui index-nya
• Bagaimana cara mengetahui index dari data yang ingin diambil?
• Membutuhkan dua hal: key dan fungsi hash
• Masukkan key ke dalam fungsi hash untuk mendapatkan index dari data yang dicari
• Jadi lokasi dari data didapatkan dari hasil fungsi hash dari nilai data tersebut

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Kegunaan Hash Table https://www.bigocheatsheet.com/

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Fungsi Hash
Misalkan fungsi hash yang dipakai adalah Kode Nama Prodi
71 Informatika
𝑓 𝑘𝑒𝑦 = 𝑘𝑒𝑦 𝑚𝑜𝑑 7 72 Sistem Informasi
41 Kedokteran
Maka untuk key 71, lokasi penyimpanannya
dapat dihitung dengan fungsi hash tersebut, yaitu: 11 Manajemen

F(71) = 71 mod 7 = 1
Berarti ‘Informatika’ disimpan di index ke-1

Informati Sistem Manajem Kedokter


ka (71) Informasi en (11) an (41)
(72)
0 1 2 3 4 5 6

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Fungsi Hash
• Fungsi yang dapat memetakan suatu nilai data (yang panjang/besarnya bisa
bervariasi) ke dalam suatu nilai yang memiliki rentang yang tetap (fixed,
sudah ditentukan sebelumnya)
• Merupakan fungsi satu arah. Dari key bisa didapatkan value, tetapi tidak sebaliknya
• Fungsi hash yang bagus:
• Proses perhitungannya cepat
• Deterministic = untuk key yang sama, maka nilai hash yang dihasilkan harus sama
• Fixed-length value = hasilnya adalah nilai dalam rentang yang telah ditentukan
• Evenly distribution = menyebar key secara merata (tidak mengumpul di satu tempat
saja)
• Perfect hash function
• Hanya terjadi jika seluruh key sudah diketahui sebelumnya

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Permasalahan Fungsi Hash
• Simple Uniform Hashing
• Setiap key memiliki peluang yang sama untuk menempati salah satu dari slot yang
tersedia di dalam hash table
• Hasil dari hashing tidak mengumpul di satu area saja
• Jika f(key) = key mod 7, maka
• Key = 9, 16, 37, 2 => semuanya akan menghasilkan index ke-2
• Karena memetakan nilai yang panjang/besarnya bervariasi ke tempat yang
ukurannya sudah ditetapkan, maka ada kemungkinan fungsi hash
menghasilkan nilai yang sama walaupun key yang digunakan berbeda
• Hash Collision merupakan masalah utama yang sering ditemui pada hash
table
• Perlu diperhatikan keterbatasan waktu (time) dan ruang (space)

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Time and Space Problem
• Bagaimana jika fungsi hash yang dipakai adalah f(key) = key?
• 71 berarti disimpan di index ke-71
• 72 berarti disimpan di index ke-72
• 41 berarti disimpan di index ke-41
• Mengasumsikan memiliki space yang besar (menjadi tidak efisien karena ada banyak
tempat kosong yang tidak terpakai)
• Mengatasi collision
• Seharusnya dilakukan dengan cepat dan efisien, karena berkaitan dengan masalah
waktu
• Jika waktu tidak masalah, maka cukup dengan linear probing saja, tetapi
membutuhkan jumlah space yang besar

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Jenis Fungsi Hash
• Modulo
• 𝒇(𝒌𝒆𝒚) = 𝒌𝒆𝒚 𝒎𝒐𝒅 𝒏
• Dimana n biasanya adalah kapasitas maksimal dari hash table
• Bisa juga n berupa bilangan prima
• Multiplication
• Pilih suatu nilai A yang memenuhi 0 < A < 1. Biasanya A = 0.618 (golden ratio)
• 𝒇(𝒌𝒆𝒚) = 𝒇𝒍𝒐𝒐𝒓( 𝒎 ∗ ((𝒌𝒆𝒚 ∗ 𝑨) − 𝒇𝒍𝒐𝒐𝒓(𝒌𝒆𝒚 ∗ 𝑨)))
• m adalah nilai yang lebih besar dari kapasitas maksimal hash table (kelipatan 2)
• floor() adalah fungsi pembulatan ke bawah, untuk menghilangkan pecahan/desimal,
menghasilkan bilangan bulat (integer)
• Universal Hashing
• Sediakan bermacam-macam fungsi hash, lalu gunakan salah satu secara acak

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Hash pada String
• Menggunakan modulo / multiplication tentu membutuhkan bilangan (real /
integer)
• Sehingga string harus dikonversi terlebih dahulu
• Biasanya menggunakan nilai ASCII / Unicode code point-nya
• Pada Python bisa didapatkan dengan fungsi ord() – menghasilkan Unicode code
point
• Posisi/urutan karakter pada string sangat penting
• Jika berbeda urutan, maka string-nya akan berbeda
• Misal hash table berukuran 15, kemudian masuk input string sebagai
berikut, tentukan kondisi hash table setelah seluruh input sudah masuk!
• ‘upin’, ‘bambang’, ‘anto’

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Hash pada String
𝑖= 𝑙𝑒𝑛 𝑘𝑒𝑦 −1 ‘upin’ = 117 + 112 + 105 + 110 = 444
𝑓 𝑘𝑒𝑦 = ෍ 𝑜𝑟𝑑 𝑘𝑒𝑦 𝑖 𝑚𝑜𝑑 15 f(‘upin’) = 444 mod 15 = 9
𝑖= 0
‘bambang’ = 98 + 97 + 109 + 98 + 97
+ 110 + 103 = 712
f(‘bambang’) = 712 mod 15 = 7
total = 0
for c in key: ‘anto’ = 91 + 110 + 116 + 111 = 434
total = total + ord(c) f(‘anto’) = 434 mod 15 = 14

Bagaimana dengan ‘dani’ dan ‘dina’?

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Hash pada String
Polinomial Rolling Hash Function
𝑓 𝑘𝑒𝑦 = 𝑘𝑒𝑦 0 × 𝑃0 + 𝑘𝑒𝑦 1 × 𝑃1 + ⋯ + 𝑘𝑒𝑦 𝑚 − 1 × 𝑃𝑚−1 𝑚𝑜𝑑 𝑀

key[0], key[1], key[2], … , key[m-1] adalah nilai ASCII/Unicode code point dari
setiap karakter pada sebuah string yang panjangnya m

Nilai P biasanya berupa bilangan prima, (31 atau 53)

M adalah sebuah angka prima yang sangat besar, biasanya M = 10^9 + 9

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Contoh Hash Table
• Misalkan ingin menyimpan data berikut ini pada sebuah hash table
berukuran 13:
• 93, 70, 137, 24, 51, 83, 65, 111
• Fungsi hash yang dipakai adalah f(key) = key mod 13
• Digunakan mod 13 karena hash table berukuran 13
• Ini contoh yang sangat sederhana, dalam banyak kasus, fungsi hash bisa lebih
kompleks lagi perhitungannya.

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Contoh Hash Table 0
1
f(key) = key mod 13
2 93
93, 70, 137, 24, 51, 83, 65, 111
3
4
f(93) = 93 mod 13 = 2
83 5 70
f(70) = 70 mod 13 = 5 Collision! 6
f(137) = 137 mod 13 = 7 7 137
f(24) = 24 mod 13 = 11 8
f(51) = 51 mod 13 = 12 9
10
f(83) = 83 mod 13 = 5
11 24
12 51

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Mengatasi Collision
• Fungsi hash yang bagus seharusnya dapat meminimalkan terjadinya
collision
• Load factor = 100 % * (jumlah data tersimpan / kapasitas hash table)
• Jika load factor semakin besar, maka kemungkinan terjadinya collision akan semakin
besar juga
• Jika terjadi collision, maka data yang baru masuk tetap harus masuk ke
dalam hash table, tetapi berada di posisi yang bukan seharusnya
• Penanganan collision = pencarian index alternatif untuk data yang mengalami
collision
• Open Addressing = Linear Probing, Quadratic Probing, Double Hashing
• Open Hashing = Separate Chaining

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Bagaimana jika masuk
Linear Probing 0 50 data baru, 50?
1
2 93 50 mod 13 = 11 (collision)
3
4
83 5 70
19 6 83
7 137
8 19
Bagaimana jika masuk 9 Bagaimana dengan
data baru, 19? 10 kompleksitas Linear
50 11 24 Probing?
19 mod 13 = 6 (collision)
12 51
Sesuai namanya, O(n)

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Quadratic Probing
• Jika linear probing mencari tempat alternatif di sebelahnya (selisih 1), maka
quadratic probing mencari tempat alternatif berdasarkan jarak kuadrat
• Dengan harapan akan lebih mudah menemukan tempat kosong, karena “melompat”
lebih jauh

𝑖𝑛𝑑𝑒𝑥 = 𝑖𝑛𝑑𝑒𝑥 + 12 𝑚𝑜𝑑 𝑠𝑖𝑧𝑒


𝑖𝑛𝑑𝑒𝑥 = 𝑖𝑛𝑑𝑒𝑥 + 22 𝑚𝑜𝑑 𝑠𝑖𝑧𝑒
𝑖𝑛𝑑𝑒𝑥 = 𝑖𝑛𝑑𝑒𝑥 + 32 𝑚𝑜𝑑 𝑠𝑖𝑧𝑒

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Double Hashing
• Menyiapkan dua fungsi hash sekaligus
• Jika fungsi hash pertama menghasilkan collision, maka hitung lokasi baru dengan
fungsi hash kedua
• Bagaimana jika fungsi hash kedua juga menghasilkan collision?
• Gunakan linear probing atau quadratic probing

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Separate Chaining
• Biasa disebut sebagai Open Hashing / Closed Addressing
• Alamat tidak berubah, tetap dari hasil perhitungan fungsi hash
• Biasanya berupa list / linked list
• Kompleksitas pencarian adalah O(n) pada kondisi di mana seluruh data
berada pada chain yang sama (full collision)
• Berarti fungsi hash tidak berjalan / tidak berhasil sama sekali

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Separate Chaining 0
Bagaimana jika masuk 1
data baru, 19? 2 93
3
19 mod 13 = 6 (collision) 4
Bagaimana jika masuk 5 70
data baru, 50? 6 83 19
7 137
50 mod 13 = 11 (collision) 8
9
Bagaimana jika masuk data 10
baru, 115?
11 24 50 115
115 mod 13 = 11 (collision)
12 51

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Penggunaan Hash Table
• Implementasi Dictionary
• Dalam bahasa pemrograman lain disebut sebagai Associative Array
• Representasi Object pada bahasa pemrograman dinamis yang mendukung
OOP
• Perl, Python, Javascript, Ruby
• Database Indexing
• Untuk mempercepat operasi pencarian pada database
• Caches
• Tempat penyimpanan data sementara yang dapat diambil dengan cepat
• Digunakan dalam berbagai macam algoritma untuk mempercepat
penyimpanan dan pencarian data

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Pertanyaan?

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana
Minggu Depan
12 – Tree

Struktur Data | Yuan Lukito, S.Kom., M.Cs © 2021 | Prodi Informatika, Universitas Kristen Duta Wacana

Anda mungkin juga menyukai