MAKALAH “HASH TABLE”
ALGORITMA DAN STRUKTUR DATA II
Disusun Oleh :
Syukur Jaya Mendrofa 201501072
Kelas: C
Dosen Pengampu :
Oskar Ika Adi Nugroho, ST., MT
JURUSAN SISTEM INFORMASI
SEKOLAH TINGGI ILMU KOMPUTER “YOS SUDARSO”
PURWOKERTO
BAB I
PENDAHULUAN
A. Latar BelakangPada metode-metode pencarian yang telah kita pelajari, secara umum banyaknya
pembandingan untuk mencari suatu data atau rekaman yang diinginkan tergantung dari
banyaknya data atau rekaman yang diketahui. Jika sebuah data atau rekaman bisa ditemukan
dengan sekali pemasupan terhadap tabel yang digunakan untuk menyimpan data atau
rekaman tersebut, maka lokasi data atau rekaman dalam tabel hanya tergantung dari kunci
yang digunakan dan tidak tergantung pada kunci yang lain, seperti dalam pohon. Cara yang
paling efisien untuk mengorganisir tabel ini adalah dengan menggunakan larik (array). Jika
kunci berupa integer, kunci tersebut sekaligus bisa digunakan sebagai subskrip dari larik
(array) yang dimaksud.
B. Rumusan Masalah
1. Pengenalan hash table, ukuran hash table (H-size), load factor () dan fungsi hash
table.
2. Metode-metode pada fungsi hash table dan contoh fungsi hash table.
3. Tabrakan pada fungsi hash table.
C. Tujuan
Tujuan dari pembuatan makalah ini adalah :
Sebagai salah satu tugas dari matakuliah Algoritma dan Struktur Data II.
Memahami pengertian dari hash table, ukuran hash table (H-size), load factor () dan
fungsi hash table.
Mengenal strategi umum untuk menangani collision (tabrakan) pada fungsi hash table.
BAB II
PEMBAHASAN
A. PENGENALAN HASH TABLE
Hashing digunakan untuk menyimpan data yang cukup besar pada ADT yang disebut
hash table.
Ukuran Hash table (H-size) biasanya lebih besar dari jumlah data yang hendak disimpan.
Load factor
(
)
adalah perbandingan antara data yang disimpan dengan ukuranhash table.
Fungsi hash memetakan elemen pada indeks dari hash table.
Hashing adalah teknik untuk melakukan penambahan, penghapusan dan pencarian
dengan constant average time.
Untuk menambahkan data atau pencarian, ditentukan key dari data tersebut dan
digunakan sebuah fungsi hash untuk menetapkan lokasi untuk key tersebut.
Hash tables adalah arrays dengan sel-sel yang ukurannya telah ditentukan dan dapat
berisi data atau key yang berkesesuaian dengan data.
Untuk setiap key, digunakan fungsi hash untuk memetakan key pada bilangan dalam
Fungsi hash harus memiliki sifat berikut:
Mudah dihitung.
Dua key yang berbeda akan dipetakan pada dua sel yang berbeda pada array. (secara
umum tidak bisa berlaku, mengapa? ).
Dapat dicapai dengan menggunakan direct-address table dimana semesta dari
key relatif kecil.
Membagi key secara rata pada seluruh sel.
Sebuah fungsi hash sederhana adalah menggunakan fungsi mod (sisa bagi) dengan
bilangan prima.
Dapat menggunakan manipulasi digit dengan kompleksitas rendah dan distribusi key
yang rata.
B. METODE-METODE PADA FUNGSI HASH TABLE
1. Metode Melipat (folding)
Metode ini membagi nilai asli ke dalam beberapa bagian, kemudian menambahkan
nilai-nilai tersebut, dan mengambil beberapa angka terakhir sebagai nilai hashnya.
Contoh :
Phone no: 3-group index
7313018 73+13+018 104
5392309 53+92+309 454
2. Metode Pembagian Bersisa (Modular Arithmetic)
Melakukan konversi data ke bentuk bilangan bulat, dibagi dengan ukuran hash
table, dan mengambil hasil sisa baginya sebagai indeks.
Contoh :
Phone no: 2-group index
3. Metode Transformasi Radiks (radix transformation)
Karena nilai dalam bentuk digital, basis angka atau radiks dapat diganti sehingga
menghasilkan urutan angka-angka yang berbeda. Contohnya nilai desimal (basis 10)
bisa ditransformasikan kedalam heksadesimal (basis 16). Digit atas hasilnya bisa
dibuang agar panjang nilai hash dapat seragam.
4. Metode Pengaturan ulang digit (digit rearrangement)
Metode ini mengubah urutan digit dengan pola tertentu. Contohnya mengambil
digit ke tiga sampai ke enam dari nilai aslinya, kemudian membalikan urutannya dan
menggunakan digit yang terurut terbalik itu sebagai nilai hash. Fungsi hash yang
bekerja dengan baik untuk penyimpanan pada database belum tentu bekerja dengan
baik untuk keperluan kriptografi atau pengecekan kesalahan. Ada beberapa fungsi hash
terkenal yang digunakan untuk keperluan kriptografi. Diantaranya adalah fungsi hash
message-diggest, contohnya MD2, MD4, dan MD5, digunakan untuk menghasilkan
nilai hash dari tanda tangan digital yang disebut messagediggest. Ada pula Secure Hash
7313018 731+3018 3749 % 100 = 49
5392309 539+2309 2848 % 100 = 48
Algorithm (SHA), sebuah algoritma standar yang menghasilkan message-diggest yang
lebih besar (60-bit) dan serupa dengan MD4.
Cara memilih Fungsi hash :
Sebuah fungsi hash yang bagus memiliki dua kriteria:
1. Harus dapat cepat dihitung.
2. Harus meminimalkan juga collisions yang terjadi.
Contoh fungsi Hash
Fungsi Hash untuk string
X = 128
A3 X3 + A2 X2 + A1 X1 + A0 X0
(((A3 X) + A2) X + A1) X + A0
Hasil dari fungsi hash jauh lebih besar dari ukuran table, sehingga perlu di modulo dengan
ukuran hash table.
Contoh fungsi Hash
int hash(String key, int tableSize)
{
int hashVal = 0;
for (int i=0; i < key.length(); i++) {
hashVal = (hashVal * 128+ key.charAt(i)) % tableSize;
}
return hashVal % tableSize;
Modulo :
(A + B) % C = (A % C + B % C) % C
(A * B) % C = (A % C * B % C) % C
int hash(String key, int tableSize)
{
int hashVal = 0;
for (int i=0; i < key.length(); i++)
{
hashVal = (hashVal * 37+ key.charAt(i));
}
hashVal %= tableSize;
if (hashVal < 0)
{
hashVal += tableSize;
}
return hashVal;
}
int hash(String key, int tableSize) {
int hashVal = 0;
for (int i=0; i < key.length(); i++)
{
}
return hashVal % tableSize; }
C. TABRAKAN PADA FUNGSI HASH
Collision Resolution: Penyelesaian bila terjadi collision (tabrakan).
Dikatakan terjadi collision jika dua buah keys dipetakan pada sebuah sel.
Collision bisa terjadi saat melakukan insertion.
Dibutuhkan prosedur tambahan untuk mengatasi terjadinya collision.
Ada dua strategi umum untuk menangani collision (tabrakan), yaitu :
1. Closed Hashing (Open Addressing)
Ide: mencari alternatif sel lain pada tabel.
Pada proses insertion, coba sel lain sesuai urutan dengan menggunakan fungsi
pencari urutan seperti berikut:
hi (x) = ( hash (x) + f (i) ) mod H-size f (0) = 0
Fungsi f digunakan sebagai pengatur strategy collisionresolution.
Bagaimana bentuk fungsi f ?
Beberapa strategi/alternatif untuk menentukan bentuk fungsi f, yaitu:
1) Linear probing
Kompleksitas dari teknik ini bergantung pada nilai
(
)
(load factor). Definisi
(
)
(load factor) adalah angka antara 0 dan 1 yang digunakan untukmenaikkan kapasitas tabel hash jika sudah tidak mencukupi untuk menampung
pasangan kunci dan data. Penambahan kapasitas dilakukan sebesar load factor kali
kapasitas semula.:
(
)
(Load factor) dari T = n/m Linear Probing tidak disarankan bila:
(
)
> 0.5 Linear Probing hanya disarankan untuk ukuran hash table yang ukurannya lebih
besar dua kali dari jumlah data.
2) Quadratic probing
Menghindari primary clustering dengan menggunakan fungsi:
f(i) = i2
Menimbulkan banyak permasalahan bila hash table telah terisi lebih dari setengah.
Perlu dipilih ukuran hash table yang bukan bilangan kuadrat.
Dengan ukuran hash table yang merupakan bilangan prima dan hash table yang
terisi kurang dari setengah, strategy quadratic probe dapat selalu menemukan lokasi
untuk setiap elemen baru.
Dapat melakukan increment bila terjadi collision
Perhatikan bahwa fungsi quadratic dapat dijabarkan sebagai berikut:
f(i) = i2 = f(i-1) + 2 i - 1.
Menimbulkan second clustering. Elemen-elemen yang menurut perhitungan hash
diletakkan pada lokasi sel yang sama, diarahkan pada sel pengganti yang sama.
3) Double hashing
fungsi untuk collisionresolution disusun dengan fungsi hash seperti :
f(i) = i * hash2 (x)
Harus hati-hati dalam memilih fungsi hash kedua untuk menjamin agar tidak
menghasilkan nilai 0 dan mem-probe ke seluruh sel.
Salah satu syaratnya ukuran hash table haruslah bilangan prima.
2. Open Hashing (Chaining)
Menyediakan sebuah linked list untuk setiap elemen yang memiliki nilai hash
sama.
Tiap sel pada hash table berisi pointer ke sebuah linked list yang berisikan
data/elemen.
Analisa Open Hashing :
Untuk pencarian, gunakan fungsi hash untuk menentukan linked
list mana yang memiliki elemen yang dicari, kemudian lakukan pembacaan
terhadap linked list tersebut.
Penghapusan dilakukan pada linked list setelah pencarian elemen dilakukan.
Dapat saja digunakan struktur data lain selain linked list untuk menyimpan
elemen yang memiliki fungsi hash yang sama tersebut.
Kelebihan utama dari metode ini adalah dapat menyimpan data yang tak terbatas.
(dynamic expansion).
Kekurangan utama adalah penggunaan memory pada tiap sel.
Secara umum panjang dari linked list yang dihasilkan sejalan dengan nilai .
Kompleksitas insertion bergantung pada fungsi hash dan insertion pada
linked-list.
Untuk pencarian, kompleksitasnya adalah waktu konstan dalam mengevaluasi
fungsi hash + pembacaan list.
Average case bergantung pada
(
)
. Aturan umum untuk Open Hashing adalah untuk menjaga agar:
(
)
1
. Digunakan untuk data yang ukuran-nya dinamic.
Fungsi dan analisa Open Hashing:
Menambahkan sebuah elemen ke dalam tabel:
Dilakukan dengan menambahkan elemen pada akhir atau awal linked- list yang sesuai
dengan nilai hash.
Bergantung apakah perlu ada pengujian nilai duplikasi atau tidak.
Dipengaruhi berapa sering elemen terakhir akan diakses.
Hal-hal lain yang umum dan perlu diperhatikan pada metode closed hashingresolutions: 1. Proses menghapus agak membingungkan karena tidak benar-benar dihapus.
2. Secara umum lebih sederhana dari pada Open Hashing. 3. Bagus bila diperkirakan tidak akan terjadi banyak collision.
4. Jika pencarian berdasarkan fungsi hash gagal, kemungkinan harus mencari/membaca seluruh tabel.
BAB III
PENUTUP
A. KesimpulanHash tables adalah arrays dengan sel-sel yang ukurannya telah ditentukan dan dapat berisi data atau key yang berkesesuaian dengan data. Hash tables juga merupakan sebuah struktur data yang terdiri atas sebuah tabel dan fungsi yang bertujuan untuk memetakan nilai kunci yang unik untuk setiap record (baris) menjadi angka (hash) lokasi record tersebut dalam sebuah tabel. Keunggulan dari struktur hash table ini adalah waktu aksesnya yang cukup cepat, jika record yang dicari langsung berada pada angka hash lokasi penyimpanannya. Akan tetapi pada kenyataannya sering sekali ditemukan hash table yang
record-recordnya mempunyai angka hash yang sama (bertabrakan). Hashing digunakan sebagai metode untuk menyimpan data dalam sebuah array agar penyimpanan data, pencarian data, penambahan data, dan penghapusan data dapat dilakukan dengan cepat. Ide dasarnya adalah menghitung posisi record yang dicari dalam array, bukan membandingkan
record dengan isi pada array. Fungsi yang mengembalikan nilai atau kunci disebut fungsi
hash (hash function) dan array yang digunakan disebut tabel hash (hash table). Hash table
menggunakan struktur data array asosiatif yang mengasosiasikan record dengan sebuah
field kunci unik berupa bilangan (hash) yang merupakan representasi dari record tersebut.
B. Saran
Puji syukur kepada Tuhan yang maha esa berakhirlah pembahasan hash table dalam
makalah ini. Saya sadar bahwa makalah ini masih jauh dari kata sempurna. Oleh karena itu
kritik dan saran yang kondusif begitu saya harapkan untuk memperbaiki segala kekurangan
dan kesalah saya supaya kedepannya saya dapat membuat makalah yang lebih baik dan
tentunya lebih bermanfaat dan menjadi wadah pengetahuan dan informasi bagi banyak
DAFTAR PUSTAKA
1. www.academia.edu/25537608/TABEL_HASH_HASH_TABLE
2. https://www.scribd.com/doc/98523911/Pemba-Has-an-Hashing
3. http://en.wikipedia.org/wiki/SHA_hash_functions
4. https://endahpermatasari24.wordpress.com/