Hashing (Hash Table) & Binary Tree
✲ Hash Table
Nah, untuk sesi blog kali ini, kita masih akan membahas tentang Struktur Data yaitu Hash Table. Hash Table adalah suatu struktur data yang berupa tabel, dimana nantinya tiap di dalam tabel tersebut terdapat sebuah tempat-tempat untuk menyimpan data-data. Tempat-tempat tersebut kita analogikan sebagai loker, yang dimana tiap loker memiliki index lokernya dan kunci lokernya dan didalam lokernya terdapat data-data yang kita simpan atau biasanya disebut juga value.
✽ Hashing Function
Jika kalian lihat gambar diatas, dapat dilihat bahwa "John Smith" , "Lisa Smith" merupakan kunci loker nya atau (Keys). Nah dengan kunci tersebut, kita dapat mengetahui index dari loker tersebut, dan didalam loker tersebut terdapat data-data yang kita simpan sesuai dengan lokernya. Nah, untuk mendapatkan index loker dari kunci yang kita punya, kita dapat menggunakan suatu metode yaitu Hash Function. Hash Function ini adalah proses atau metode untuk mendapatkan index dengan cara mengubah kunci yang kita punya menjadi yang namanya Hash Value. Hash value inilah yang nantinya dipakai sebagai index dari tempat untuk penyimpanan data kita. Jadi, dengan kata lain, Hash Function : Hash Key diubah menjadi -> Hash Value. Nah, pasti kalian bertanya-tanya nih, hash function itu cara pakainya gimana. Untuk hash function sendiri, banyak sekali caranya, dan biasanya itu menggunakan komputasi matematika. Bagaimana kalau nanti dalam proses hash function, kita mendapatkan hash value yang padahal hash value tersebut sudah terdapat data yang diisi sebelumnya? Nah, hal ini dinamakan sebagai Collision. Jadi, Collision itu intinya, saat kita melakukan hashing, kita mendapatkan loker yang sudah ada isinya, jadi cara solvenya bagaimana? Cara solve Collision itu ada banyak, diantaranya adalah:
- Separate Chaining (Open Hashing)
Jadi, dalam metode Separate Chaining ini, jika kita mendapatkan suatu hash value yang sudah ada sebelumnya setelah melakukan hash function, data yang baru ingin kita insert ini kita sambung dengan data yang sebelumnya dengan menggunakan linked list. Jadi data pertama akan memegang alamat data kedua, dan begitu seterusnya sehingga kita tetap dapat melakukan insert dan pembacaan data.
- Linear Probing
Nah untuk cara berikutnya yaitu Linear Probing, berbeda dengan chaining, cara ini tidak menggunakan linked list. Dengan metode ini, untuk solve collision yang ada adalah dengan memasukkan data yang kita punya ke index array selanjutnya. Seperti pada gambar di atas, Code Monk sudah terdapat di index ke 2. Namun setelah melakukan hash function terhadap "Hashing", ternyata hash value yang didapatkan juga index 2, makanya "Hashing" tersebut dipindahkan ke index berikutnya yaitu index ke 3.
✲
Hashing in BlockChain
Seperti yang kita ketahui, blockchain menggunakan metode yang dinamakan cryptography untuk melindungi dan mengamankan data-data yang dipunyai oleh mereka. Manfaat yang dimiliki cryptography dalam blockchain ini cukup banyak, selain melindungi transaksi yang terjadi, juga melindungi mata uang digital yang disimpan. Nah, cryptography ini digunakan sebagai hashing untuk menandakan setiap2 blok yang ada agar menjadi unik. Penanda hash tersebut untuk melindungi data-data yang ada.
✻
Binary Tree
Binary Tree adalah konsep struktur data yang berbentuk seperti pohon yang dapat saling berhubungan dan terdiri dari 1 akar utama dan memiliki maksimal 2 child yang biasanya nanti disebut dengan left dan right. Sebenarnya, terdapat banyak sekali jenis binary tree, diantaranya adalah binary search tree, red black tree, AVL tree (Balanced Tree), Skewed Tree.
https://www.hackerearth.com/practice/data-structures/hash-tables/basics-of-hash-tables/tutorial/
https://www.programiz.com/dsa/hash-table