Nama : Sofyan Adrianto
NIM : 2301869121
Jurusan : TI Statistika
HASHING TABLE
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.
Ide Dasar
Ide utama dari hashing
adalah mengubah suatu string menjadi suatu bilangan dengan suatu fungsi.
Misalkan kita memiliki string "abca", dan fungsi f yang memetakan
string ke bilangan bulat berikut:
f(S) = (
(banyaknya 'a')*1 +
(banyaknya 'b')*2 +
(banyaknya 'c')*3 +
... +
(banyaknya 'z')*26
) mod 1000000
Artinya:
f("abca") =
(2*1 + 1*2 + 1*3 + 0*4 + 0*5 + ... + 0*26) mod 1000000
= 7
Kita berhasil mengubah
string "abca" menjadi sebuah angka, yaitu 7. Hal ini juga akan
dilakukan untuk setiap nama mahasiswa dalam setiap operasi; sebelumnya di-hash
terlebih dahulu. Dengan demikian, direct addressing table dapat kembali
digunakan! Kini kompleksitas untuk setiap operasi adalah O(K), dengan K adalah
kompleksitas menghitung nilai hash melalui fungsi hashing. Untuk contoh di
atas, K = panjang string. Jika panjang setiap string cukup kecil, setiap
operasi bisa dianggap O(1).
Hashing
Dapat diartikan sebagai
aktivitas untuk mengubah suatu objek menjadi serangkaian
angka/karakter/sejenisnya. Pada contoh sebelumnya, kita melakukan hash pada
string menjadi bilangan.
Anda mungkin menyadari
bahwa tabel T pada contoh sebelumnya bekerja seperti array. Kita seakan-akan
dapat melakukan operasi:
T["Sofyan"] =
3;
printf("%d\n",
T["Sofyan"]);
Pada ilmu komputer,
tabel seperti ini disebut sebagai hash table. Struktur data ini erat kaitannya
dengan konsep "key value". Key adalah hal yang menjadi indeks, dan
value adalah nilai yang berasosiasi dengannya. Pada contoh permasalahan
sebelumnya, nama mahasiswa merupakan key, dan IPK merupakan value.
Perhatikan bahwa key
tidak harus berupa string. Tipe data apapun dapat didukung, asalkan
didefinisikan fungsi hash-nya. Kalau untuk value, tentu saja datanya bisa
bertipe apapun.
Operasi minimal yang
perlu didukung oleh hash table adalah:
Diberikan key X dan
value Y, catat bahwa value dari X adalah Y. Operasi ini dapat dianggap
"T[X] = Y".
Diberikan key X, cari
value-nya. Operasi ini dapat dianggap seperti mengakses "T[X]".
Kedua operasi ini akan
saya sebut sebagai update dan read. Kompleksitas operasi-operasi ini adalah
O(K), dengan O(K) adalah kompleksitas melakukan hash pada suatu key.
Fungsi Hashing
Pada bagian sebelumnya,
saya memberi contoh fungsi hashing sederhana. Sebenarnya fungsi hashing itu
bebas, terserah Anda ingin mendefinisikannya seperti apa. Namun, diharapkan
fungsi hashing memiliki kriteria sebagai berikut:
Untuk dua buah key yang
sama, hasil hashing-nya selalu sama.
Memiliki kompleksitas
rendah.
Meminimalkan collision
(akan dijelaskan pada bagian selanjutnya).
Pada kebanyakan kasus,
kompleksitas fungsi hash dapat dianggap O(1). Sehingga operasi update dan read
bekerja dalam O(1).
Hashing Table pada
Blockchain
Secara
sederhana, hashing berarti mengambil string input dengan panjang berapapun dan
memberikan output dengan panjang tetap. Dalam konteks cryptocurrency
seperti bitcoin, transaksi diambil sebagai input dan dijalankan
melalui algoritma hashing (bitcoin menggunakan SHA-256) yang
memberikan output dengan panjang tetap.
Binary tree
Binary
Tree atau Pohon Biner adalah sebuah pohon dalam struktur data yang bersifat
hirarkis (hubungan one to many). Tree bisa didefenisikan sebagai kumpulan
simpul dengan setiap simpul mempunyai paling banyak dua anak. Secara khusus,
anaknya dinamakan kiri dan kanan. Binary tree tidak memiliki lebih dari tiga
level dari Root.
Binary
tree adalah suatu tree dengan syarat bahawa tiap node (simpul) hanya boleh
memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah. Tiap
node dalam binary treee boleh memiliki paling banyak dua child (anak simpul),
secara khusus anaknya dinamakan kiri dan kanan.
Konsep tree:
Root : Node di paling
atas
Edge: Garis yang
menghubungkan parent dengan child
Leaf: node yang tidak
mempunyai anak
Siblings: node yang
mempnyai parent yang sama
Degree: total subtree
dari sebuah node
Height/depth: maksimum
degree dari sebuah tree
jika ada garis yang
menghubungkan a kepada b, a disebut ancestor dari b dan b adalah descendant
dari a.
Jenis-jenis
Binary Tree
- Full Binary Tree, yaitu
Binary Tree yang tiap nodenya ( kecuali leaf) memiliki dua child dan tiap
subtree harus mempunyai panjang path yang sama.
- Complete Binary Tree, Mirip
dengan Full Binary Tree, namun tiap subtree boleh memiliki panjang path
yang berbeda. Node kecuali leaf memiliki 0 atau 2 child.
- Skewed Binar Tree, Yakni
Binary Tree yang semua nodenya(kecuali leaf) hanya memiliki satu child.
Binary Search
Tree Adalah
binary tree dengan sifat bahwa semua left child harus lebih kecil dari right
child dan parentnya. Juga semua right child harus lebih besar dari left child
serteparentnya. Binary search tree dibuat untuk mengatasi kelemahan pada binary
tree biasa, yaitu kesulitan dalam searching / pencarian node tertentu dalam
binary tree. Pada dasarnya, operasi dalam binary search tree dama dengan
binary tree biasa, kecuali pada operasi insert, update, dan delete.
- Operasi insert, Pada
binary search tree, insert dilakukan setelah ditemukan lokasi yang tepat.
(loksi tidak ditemukan oleh user sendiri )
- Operasi search, Seperti
pada binary tree, biasa, namun disini. Update akan berpengaruh pada posisi
node tersebut selanjutnya. Bila setelah diupdate mengakibatkan tree tersebut
bukan binary search tree lagi, maka harus dilakuakn perubahan pada
tree dengan melakukan perubahan rotasi supaya tetap menjadi binary
seacrh tree.
- Operasi Delete, Seperti
halnya update, delete dalam binary search tree juga turut mempengaruhi
struktur dati tree tersebut. Pada operasi delete, diakukan terhadap node
dengan 2 child, maka untuk menggantikannya, diambil node paling kiri dari
right subtree.

No comments:
Post a Comment