Anda di halaman 1dari 11

http://fieyanh.blogspot.co.id/2012/01/struktur-data-hash-table.

html

Struktur Data : Hash Table


Andhika Nur Afian

1.

Hash table adalah Hashing adalah transformasi aritmatik sebuah string


dari karakter menjadi nilai yang merepresentasikan string aslinya. Menurut
bahasanya, hash berarti

memenggal

dan

kemudian

menggabungkan. Hashing digunakan sebagai metode untuk menyimpan data


dalam sebuah array agar penyimpanan data, pencarian data, penambahan
data, dan penghapusan data dapat dilakukan dengan cepat.
2.

Keunggulan dari implementasi


search

tidak

akan

terlihat

hash

dengan

table : menggunakan

jelas. Akan

tetapi ,

binary

pada kasus

dengan jumlah record yang sangat besar, lebar lokasi penyimpanan yang
kecil, dan banyaknya record yang mempunyai angka hash
pengimplementasian binary search

yang sama,

dapat mengefisienkan waktu dengan

perbedaan waktu akses yang lebih cepat dari pada menggunakan metode
standar hash table.

Hash Table dengan link List

Pada struktur
disimpan

juga

linked list, selain disimpan


field

data record yang dimasukan,

kunci yang dihasilkan

dari

rumus

(1 ). Metode

penyimpanan pada struktur ini berupa terurut menaik berdasar field

kunci

yang disimpan.

Metode penyimpanan record pada struktur baru ini agak berbeda dengan
metode penyimpanan pada struktur hash table standar, namun metode ini
masih menggunakan keunggulan
kunci dan penggunaan

dari hash table yaitu pembangkitan

hash function untuk menentukan

lokasi

record

dalam tabel.
4. Ada beberapa macam fungsi/metode hash yang relatif sederhana yang
dapat digunakan dalam penyimpanan database :
a. Metode Pembagian Bersisa (division-remainder method)

Jumlah lokasi memori yang tersedi dihitung,

kemudian jumlah tersebut

digunakan sebagai pembagi untuk membagi nilai yang asli dan menghasilkan
sisa. Sisa tersebut adalah nilai hashnya. Secara umum, rumusnya h(k)= k
mod m. Dalam hal ini m adalah jumlah lokasi memori yang tersedia pada
array. Fungsi hash tersebut menempatkan record dengan kunci k pada suatu
lokasi memori yang beralamat h(k). Metode ini sering menghasilkan nilai
hash yang sama dari dua atau lebih nilai aslinya atau disebut dengan
bentrokan. Karena itu, dibutuhkan mekanisme khusus untuk menangani
bentrokan yang disebut kebijakan resolusi bentrokan.
b. Melipat (folding)
Metode ini membagi nilai asli ke dalam beberapa bagian, kemudian
menambahkan nilai-nilai tersebut, dan mengambil beberapa angka terakhir
sebagai nilai hashnya.
c. 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.
d. 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

message-diggest. Ada pula Secure Hash Algorithm (SHA), sebuah algoritma


standar yang menghasilkan message-diggest yang lebih besar (60-bit) dan
serupa dengan MD4

https://informatika11d.wordpress.com/2012/11/22/struktur-data-hash-table/
Struktur Data Hash Table

10.1 Dasar Teori


Hash table merupakan salah satu struktur data yang digunakan dalam penyimpanan data
sementara. Tujuan dari hash table adalah untuk mempercepat pencarian kembali dari banyak
data yang disimpan. Hash table menggunakan suatu teknik penyimpanan sehingga waktu yang
dibutuhkan untuk penambahan data (insertions), penghapusan data (deletions), dan pencarian
data (searching) relatif sama dibanding struktur data atau algoritma yang lain.
Dari topik yang sebelumnya sudah dipelajari beberapa struktur data dan algoritma pencarian
(searching) yang memiliki kelebihan dan kekurangan masing-masing. Begitu pula dengan hash
table ini juga memiliki kekurangan dan kelebihan. Kelebihan dari hash table antara lain
sebagai berikut:

Hash table relatif lebih cepat

Kecepatan dalam insertions, deletions, maupun searching relatif sama

Hash table menggunakan memori penyimpanan utama berbentuk array dengan tambahan
algoritma untuk mempercepat pemrosesan data. Pada intinya hash table merupakan
penyimpanan data menggunakan key value yang didapat dari nilai data itu sendiri. Dengan key
value tersebut didapat hash value. Jadi hash function merupakan suatu fungsi sederhanauntuk
mendapatkan hash value dari key value suatu data. Yang perlu diperhatikan untuk membuat
hash function adalah:

ukuran array/table size(m),

key value/nilai yang didapat dari data(k),

hash value/hash index/indeks yang dituju(h).

Berikut contoh penggunaan hash table dengan hash function sederhana yaitu memodulus key
value dengan ukuran array : h = k (mod m)
Misal kita memiliki array dengan ukuran 13, maka hash function : h = k (mod 13).
Dengan hash function tersebut didapat :

13

25

12

27

39

Perhatikan range dari h untuk sembarang nilai k.


Maka data 7 akan disimpan pada index 7, data 13 akan disimpan pada index 0, dst..
Untuk mencari kembali suatu data, maka kita hanya perlu menggunakan hash function yang
sama sehingga mendapatkan hash index yang sama pula.
Misal : mencari data 25 h = 25 (mod 13) = 12
Namun pada penerapannya, seperti contoh di atas terdapat tabrakan (collision) pada k = 13
dan k = 39. Collision berarti ada lebih dari satu data yang memiliki hash index yang sama,
padahal seperti yang kita ketahui, satu alamat / satu index array hanya dapat menyimpan satu
data saja.
Untuk meminimalkan collision gunakan hash function yang dapat mencapai seluruh
indeks/alamat. Dalam contoh di atas gunakan m untuk me-modulo k. Perhatikan bila kita
menggunakan angka m untuk me-modulo k maka pada indeks yang lebih besar dari dan sama
dengan m di hash table tidak akan pernah terisi (memori yang terpakai semakin kecil),
kemungkinan terjadi collision juga semakin besar.
Karena memori yang terbatas dan untuk masukan data yang belum diketahui tentu collision
tidak dapat dihindari.
Berikut ini cara-cara yang digunakan untuk mengatasi collision :
1. Closed hashing (Open Addressing)
Close hashing menyelesaikan collision dengan menggunakan memori yang masih ada tanpa
menggunakan memori diluar array yang digunakan. Closed hashing mencari alamat lain apabila
alamat yang akan dituju sudah terisi oleh data. 3 cara untuk mencari alamat lain tersebut :

Linear Probing
Apabila telah terisi, linear probing mencari alamat lain dengan bergeser 1 indeks dari alamat
sebelumnya hingga ditemukan alamat yang belum terisi data, dengan rumus
(h+1) mod m.

Quadratic Probing

Quadratic Probing mencari alamat baru untuk ditempati dengan proses perhitungan kuadratik
yang lebih kompleks. Tidak ada formula baku pada quadratic probing ini,anda dapat
menentukan sendiri formula yang akan digunakan.
Contoh formula quadratic probing untuk mencari alamat baru:
h,(h+i2)mod m,(h-i2)mod m, ,(h+((m-1)/2)2)mod m, (h-((m-1)/2)2)mod m
dengan i = 1,2,3,4, , ((m-1)/2)
Mksud formula di atas adalah jika alamat h telah terisi, maka alamat lain yang digunakan
adalah (h+1)mod m, jika telah terisi gunakan alamat (h-1)mod m, jika telah terisi gunakan
alamat (h+4)mod m, jika telah terisi gunakan alamat (h-4)mod m, dan seterusnya.
Jadi jika m=23,maka nilai maksimal i adalah : ((23-1)/2)=11.

Double hashing
Sesuai dengan namanya, alamat baru untuk menyimpan data yang belum dapat masuk ke
dalam table diperoleh dengan menggunakan hash function lagi. Hash function kedua yang
digunakan setelah alamat yang dihasilkan oleh hash function awal telah terisi tentu saja
berbeda dengan hash function awal itu sendiri.
Kelemahan dari closed hashing adalah ukuran array yang disediakan harus lebih besar dari
jumlah data. Selain itu dibutuhkan memori yang lebih besar untuk meminimalkan collision.
2. Open hashing (Separate Chaining)
Pada dasarnya separate chaining membuat tabel yang digunakan untuk proses hashing menjadi
sebuah array of pointer yang masing-masing pointernya diikuti oleh sebuah linked list, dengan
chain (mata rantai) 1 terletak pada array of pointer, sedangkan chain 2 dan seterusnya
berhubungan dengan chain 1 secara memanjang.
Kelemahan dari open hashing adalah bila data menumpuk pada satu/sedikit indeks sehingga
terjadi linked list yang panjang.

Tutorial Belajar MySQL Part 36:


Pengertian Fungsi Hashing dan
Cara Kerja Password MySQL
10 Jan 14 | Andre | Tutorial MySQL | 2 Comments

Dalam tutorial tentang user MySQL sebelumnya, saya selalu


menambahkan password dalam membuat user baru agar lebih aman,
namun bagaimana sebenarnya MySQL menyimpan password tersebut?
dalam tutorial kali ini saya akan membahas tentang fungsi hashing dan
kaitannya dengan cara kerja sistem password MySQL dalam mengelola
password user.

Mengenal Sistem Enkripsi Hashing


Dalam mengelola user, MySQL menyimpan password di dalam
tabel user yang berada di dalam database mysql. Sampai pada tutorial
ini, tentunya kita telah membuat beberapa user yang harusnya terdapat
di dalam tabel ini, saya akan mencoba melihat password tiap-tiap user
yang terdaftar dengan melihatnya dari tabel user ini.
Berikut query yang diperlukan untuk melihat password seluruh user dalam
MySQL (masuklah sebagai root):
1

D:\MySQL\bin>mysql -uroot -pqwerty

2
3

Welcome to the MySQL monitor.

Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.5.27 MySQL Community Server (GPL)

6
7
8

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

10

affiliates. Other names may be trademarks of their respective

11

owners.

12
13

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

14
15
16
17
18
19
20
21
22

mysql> SHOW DATABASES;


+--------------------+
| Database

+--------------------+
| information_schema |
| mahasiswa

| mysql

| performance_schema |
| test

23

| universitas

24

+--------------------+

25

6 rows in set (0.54 sec)

26
27

mysql> USE mysql;

28

Database changed

29
30

mysql> SELECT user,password,host FROM user;

31

+------------------+-------------------------------------------+-------------+

32

| user

33

+------------------+-------------------------------------------+-------------+

34
35
36

| password

| host

| root

| *AA1420F182E88B9E5F874F6FBE7459291E8F4601 | localhost

| ilkom_admin

| *7438236BE048F242AA18D2EE074296F078CD701A | localhost

| mahasiswa

| *7438236BE048F242AA18D2EE074296F078CD701A | localhost

37
38
39
40
41
42
43
44

| ekonomi_admin

| *7438236BE048F242AA18D2EE074296F078CD701A | localhost

| tamu

| localhost

| dosen_ilkom

| *7438236BE048F242AA18D2EE074296F078CD701A | localhost

| sensus_mahasiswa | *7438236BE048F242AA18D2EE074296F078CD701A | 192.168.0.4 |


| admin_kampus

| *7438236BE048F242AA18D2EE074296F078CD701A | %

| ilkom_admin1

| *7438236BE048F242AA18D2EE074296F078CD701A | localhost

+------------------+-------------------------------------------+-------------+
13 rows in set (0.16 sec)

45

Dari query diatas, kita dapat melihat seluruh user, password,


dan lokasi dari user yang terdaftar dalam MySQL. Namun seperti yang
terlihat, isian dari password disimpan dalam angka yang acak. Ini adalah
hasil fungsi hashing yang digunakan MySQL untuk menangani password.

Pengertian Fungsi Hashing MySQL


Dalam ilmu komputer, fungsi hashing biasanya dipelajari bersama-sama
dengan kriptograf, yaitu ilmu tentang pembuatan pesan rahasia dan
cara memecahkannya.
Secara sederhana, fungsi hashing adalah sebuah fungsi yang digunakan
untuk mengacak sebuah kata menjadi kata lain yang tidak bermakna dan
sedapat mungkin kata hasil hashing tidak bisa ditebak dari kata apa kata
tersebut berasal.
Seluruh password user yang disimpan MySQL, terlebih dahulu diproses
melalui fungsi hashingini. Tujuannya, agar user yang tidak berhak, tidak
dapat melihat password user lainnya.
Sepanjang tutorial MySQL dalam duniailkom ini, saya menggunakan
password qwerty untuk user root. Tetapi seperti yang terlihat dari hasil
diatas, MySQL bukan menyimpan kata qwerty, tetapi menyimpannya
menjadi : AA1420F182E88B9E5F874F6FBE7459291E8F4601. Ini adalah
hasil fungsi hashing dari kata qwerty yang disimpan sebagai password
MySQL.

Mengenal Fungsi PASSWORD()


Untuk mendapatkan hasil hashing untuk password MySQL, kita bisa
menggunakan fungsi PASSWORD yang disediakan MySQL. Berikut contoh
query untuk penggunaan fungsi PASSWORD:
1

mysql> SELECT PASSWORD('qwerty');

+-------------------------------------------+

| PASSWORD('qwerty')

+-------------------------------------------+

| *AA1420F182E88B9E5F874F6FBE7459291E8F4601 |

+-------------------------------------------+

1 row in set (0.16 sec)

Seperti yang terlihat, MySQL meng-hashing kata qwerty menjadi


karakter-karakter acak sepanjang 41 karakter. Hasil hashing inilah yang
disimpan dalam tabel user diatas.
Lalu bagaimana cara MySQL membandingkan password saat user masuk
ke sistem? MySQL cukup membandingkan isian password yang diinput
penguna, memasukkannya ke dalam fungsi PASSWORD, dan
membandingkan hasilnya dengan yang terdapat di tabel user. Jika
hasil hashingnya bernilai sama, maka password tersebut benar dan
pengguna berhak masuk ke dalam sistem.
Anda bisa mencoba kata-kata lainnya ke dalam fungsi PASSWORD ini,
misalnya untuk user ilkom_admin, saya menggunakan password
r4hasia.
1

mysql> SELECT PASSWORD('r4hasia');

+-------------------------------------------+

| PASSWORD('r4hasia')

+-------------------------------------------+

| *7438236BE048F242AA18D2EE074296F078CD701A |
+-------------------------------------------+

6
1 row in set (0.00 sec)

Fungsi hashing ini dirancang untuk tidak bisa ditebak dari apa kata
password yang asli berasal. Namun bagaimana jika terdapat user yang
lupa passwordnya sendiri? Caranya adalah dengan membuat password
baru untuk user tersebut, atau menghapus password tersebut. Langkahlangkah untuk merubah dan menghapus password user MySQL akan kita
bahas pada tutorial selanjutnya.

Anda mungkin juga menyukai