Halo ges!! Pada post kali ini untuk pertemuan kelima, kita akan membahas tentang Hashing & Hash Tables, Trees & Binary Trees yang merupakan topik dari GSLC pada hari ini. Sebelumnya jangan lupa untuk jaga diri kita masing - masing ya. Soalnya, semakin banyak korban dari wabah itu sehinga kita semua malah harus belajar sendiri di rumah deh. Nah, tanpa basa basi mari kita bahas topik pada pertemuan kelima ini satu persatu.
Hashing
Hashing adalah sebuah fungsi yang dapat mengubah sebuah string menjadi bentuk yang lebih simpel yang dapat merepresentasi string tersebut. Contohnya adalah ketika kita menyimpan nomor telepon. Nomor telepon itu kan panjang, sekitar 12 digit. Nah dengan hashing, kita hanya perlu mengambil 3 angka belakang. Kenapa tidak 3 angka depannya aja? Karena jika kita mengambil 3 digit terdepan, pasti banyak nomor yang sama ketika nomor itu dihash.
Hash Tables
Hash table adalah sebuah tabel dalam bentuk array yang menyimpan string. Index dari tabel itu adalah data yang dihash dan nilainya merupakan string itu sendiri. Untuk lebih jelasnya, mari kita lihat ilustrasi dibawah.
Ilustrasi Hashing dari geeksforgeeks
Nah, ilustrasi tersebut menjelaskan kita tentang hash table yang dibuat berdasarkan operasi x%10. Kita ambil angka pertama yaitu 11. 11%10 adalah 1, sehingga dalam hash table, index ke 1 dimasukkan angka 11. Begitu juga berlaku terhadap 12 yang dimodulus 10. Hasilnya kan 2, sehingga pada indeks ke 2 kita masukkan value 12.
Jika dibuat tabelnya, lebih jelas seperti ini
Contoh lainnya adalah ketika kita ingin membuat hash table dari 6 String yaitu: Dem, Mezquito, Budi, Chandra, Zidan. Tabelnya akan kita buat dengan ukuran 26 maksimalnya.
Pembuatan Hash tablenya adalah seperti diatas
Fungsi dari Hash
Hash mempunyai beberapa fungsi yaitu:
Mid-square, Division (yang biasa dipakai), Folding, Digit Extraction, dan Rotating Hash.
Mid-Square
Mid-square merupakan fungsi yang mengambil nilai string dari tengah. Jika keynya merupakan string, string tersebut akan diubah nilainya menjadi angka. Contohnya adalah ketika kita mempunyai key 5010, 5011, 5012, 5013, dan 5015. Kita harus memangkatkan nilai tersebut dan mengambil string ditengahnya.
Tabel dari Mid-Square
Division
Division merupakan fungsi yang membagi nilai dari string dengan operator modulus. Biasanya bentuk dari fungsi ini adalah sebagai berikut.
Fungsi: h(z) = z mod M
z = keynya
M = nilai yang digunakan untuk memodulus z. Biasanya berupa ukuran dari tabelnya atau ukuran dari memori yang terpakai.
Contoh:
Kita mempunyai Budi, Abah, dan Caca. Kita akan menambahkan masing masing ASCIInya dan memodulusnya dengan ukuran tabelnya. Anggap saja ukurannya adalah 98.
"Budi" akan disimpan pada lokasi (66+117+100+105) % 98 = 14
"Abah" akan disimpan pada lokasi (65+98+97+104) % 98 = 70
"Caca" akan disimpan pada lokasi (96+97+99+97) % 98 = 95
Folding
Folding merupakan fungsi yang memisahkan string lalu menambahkan bagiannya menjadi sebuah hash key.
Contohnya sebagai berikut:
Tabel dari Folding
Digit Extraction
Digit extraction adalah fungsi yang mengambil digit dari angka yang diberikan.
Contoh: 15.987.654
Jika kita menggunakan fungsi digit extraction untuk mengambil digit 1, 3, dan 5, Maka kita akan mendapatkan kode hashnya yaitu 197.
Rotating Hash
Fungsi rotating hash dapat dilakukan ketika kita melakukan fungsi hash apapun. Ketika kita mendapatkan hash codenya, selanjutnya kita akan mengacaknya atau bisa disebut rotation.
Contoh:
Nilai hashnya: 857
Hasil Rotasi: 785
Collision
Ini akan terjadi jika kita mempunyai string yang sama. Misalnya kita akan memasukkan data dari string "Budi", "Caca", "Danang" "Bambang". Untuk masalah ini kita dapat mengatasinya dengan Linear Probing dan Chaining.
Linear Probing
"Budi" dan "Bambang" mempunyai huruf depan yang sama kan, makanya kita akan menaruh Bambang di 1, Caca di 2, Danang di 3, dan Budi di 4. Itu adalah cara Linear Probing bekerja, yaitu menaruh datanya di tempat manapun yang kosong. Tapi cara ini mempunyai kerugian yaitu jika terjadi banyak data yang sama yang menyebabkan collision, waktu untuk mencarinya akan lebih kompleks.
Tabel dengan teknik Linear Probing
Chain
Nah, dengan chain, kita dapat menyimpan data setiap string dalam sebuah rantai atau linked list. Contohnya Bambang->Budi di 1, Caca di 2, Danang di 3, Bambang di 4.
Tabel dengan teknik Chain
Aplikasi dari Hash Table
Hash table masih digunakan sampai sekarang. Contoh paling gampangnya adalah ketika kita memasukkan email dan password untuk login di BinusMaya. Email dan password kita akan diubah menjadi hash code dan akan dibandingkan dengan hash code yang ada di dalam database BinusMaya. Jika kodenya sesuai dan tabelnya sesuai, maka email dan password berhasil diverifikasi dan kita dapat masuk ke dalam dashboard BinusMaya. Jika email dan password tidak diubah menajadi kode hash, maka akun kita akan lebih rentan untuk diretas orang.
Trees
Trees adalah kumpulan dari satu atau lebih nodus.
Contoh Tree dari BinusMaya
Derajat dari pohon tersebut adalah 3
Derajat C adalah 2
Derajat F adalah 0
Parent dari C adalah A
Parent dari E adalah B
Leluhur dari F dan G adalah C dan A
Tingginya dalah 3
Saudara dari F adalah GBinary Tree
Binary tree adalah sebuah pohon yang anaknya mempunyai paling banyak 2 anak (atau bisa disebut juga dengan cabang). Biasanya anak atau cabangnya dapat disebut dengan anak kiri dan kana karena hanya berjumlah 2.

Contoh Binary Tree dari geeksforgeeks
Pengaplikasian dari Binary Tree
Contoh paling gampangnya adalah system file dari sebuah komputer.
/ <-- root
/ \
... home
/ \
ugrad course
/ / | \
... cs101 cs112 cs113
System file komputer dari geeksforgeeks
Jika kita menggunakan tree, maka waktu yang diperlukan untuk mencari dan mengakses sebuah key akan lebih cepat dari linked list, namun lebih lambat dari array. Bisa kita katakan bahwa kecepatan dari tree untuk mengakses data adalah rata - rata dari linked list dan array. Kita juga dapat menambah atau menghapus data dengan kecepatan rata - rata dari array dan unordered linked list. Menambah atau menghapus data menggunakan tree lebih cepat dari array tapi lebih lambar dari unordered linked list. Terakhir, tree itu mirip seperti linked list, yaitu tidak mempunyai batas data. Array kan mempunyai batasnya, nah dengan tree kita dapat menyimpan data tanpa takut terbatasi seperti ketika menggunakan sebuah array. Kesimpulannya, gunakanlah tree jika ingin akses data yang tidak terlalu cepat atau lambat dan tanpa ketakutan untuk menggunakannya terus menerus karena tidak dibatasi.
Sumber:
- https://www.geeksforgeeks.org/hashing-set-1-introduction/
- https://www.geeksforgeeks.org/hashing-data-structure/
- https://www.geeksforgeeks.org/applications-of-hashing/
- https://www.codepolitan.com/apa-itu-encoding-obfuscation-hashing-dan-encryption-58bfb7eee3215
- https://www.geeksforgeeks.org/applications-of-tree-data-structure/
- slide BinusMaya


Komentar
Posting Komentar