Hashmap And Binary Tree
Nama : Dikky Larson
NIM : 2301853930
Hashing and Hash Table
Pendahuluan
Hashing adalah sebuah metode/cara menyimpan dan mengambil data secepat mungkin. Jika kita menggunakan loop untuk mengambil suatu data dari index tertentu, maka akan diperlukan waktu compile sebanyak ON dikarenakan kita harus mencari dari awal hingga akhir.
Hal itu tidak terjadi pada hashing sebab hashing menggunakan metode penyimpanan dimana indeksnya merupakan hasil dari manipulasi string yang kita input. Sehingga ketika kita melakukan pencarian, system akan bisa langsung menunjuk pada indeks yang menjadi tempat dimana data tersebut disimpan.
Hash Function
Untuk mengubah/memanipulasi string menjadi indeks hash-table, diperlukan hash function. Berikut ini beberapa contoh dari hash function:
- Mid-square
1.1. Mid-square function, sumber: binusmaya.binus.ac.id - Division
2.1. Division function - Folding
3.1. Folding function, sumber: binusmaya.binus.ac.id - Digit Extraction
4.1. Contoh Digit Extraction Logic, sumber: binusmaya.binus.ac.id - Rotating Hash
Rotating Hash merupakan metode hash yang menggunakan salah satu function diatas (mid-square atau division), lalu key yang sudah ada kemudian dirotasi digitnya.
Contoh:
hashkey yang sudah kita dapatkan dari salah satu function = 20021
hashkey kemudian dirotasi sesuai yang kita inginkan, misalnya menjadi = 12002 (di-flip)
Collision
Collision adalah kondisi dimana value yang kita masukkan bertabrakan dengan value yang sebelumnnya di satu indeks hash table yang sama.
Misal kita akan menyimpan value atan dan acos. Jika kita hanya hashing pada huruf pertama menggunakan division, maka indeks atan dan acos akan menempati bagian indeks yang sama. Hal ini tentu akan menimbulkan issue karena kemungkinan data akan ter-overwrite.
Ada dua solusi untuk mengatasi permasalahan ini, diantaranya:
- Linear Probing
Linear probing adalah cara pertama untuk menghidari collision dengan cara memindahkannya ke indeks yang masih kosong di setelah/sebelum indeks hash. Hal ini memiliki kelemahan, salah satunya adalah terbatasnya spare indeks ,jika data yang dimasukkan semakin banyak, maka compilation time akan semakin lama karena sudah banyak indeks hash table yang penuh dan jika semua table sudah penuh, maka data tidak akan masuk atau terbuang.1.2. Penggambaran logika Linear Probing, sumber: binusmaya.binus.ac.id - Chaining
Chaining merupakan teknik penambahan memory allocation menyamping jika terjadi collision di suatu indeks hash table. Dengan penambahan penampung data secara menyamping, kita tidak perlu khawatir akan limitasi data yang ditampung.2.2.Penggambaran logika Chaining, sumber: binusmaya.binus.ac.id
Implementasi Hash Table dalam Blockchain
Hash table pada blockchain digunakan untuk mengambil transaction pada suatu block menggunakan key yang ada.
Selebihnya mengenai blockchain dapat dibaca disini: http://ceur-ws.org/Vol-2334/DLTpaper4.pdf
Tree dan Binary Tree
Pengenalan Tree
Tree adalah struktur data yang bersifat non-linear yang menggambarkan hubungan hierarki antar objek data.Konsep Tree
- Objek data yang berada di puncak/paling atas disebut root.
- Node yang berada diatas node yang lain disebut parent/ancestor dari node tersebut.
- Node yang berada di bawah node yang lain disebut child/descendant node dari parentnya.
- Garis yang menghubungkan parent dengan child node disebut edge.
- Total subtree/cabang disebut degree.
- Jumlah maksimum degree dari sebuah node disebut height/depth.
Binary Tree
Binary tree adalah jenis tree dimana tiap-tiap node memiliki paling banyak dua degree (dua child node).
Jenis Binary Tree
Beberapa jenis binary tree, diantaranya adalah:
- Perfect Binary Tree
1.1. Perfect Binary Tree, sumber: https://i.stack.imgur.com/EHqzp.png - Complete Binary Tree
2.1. Complete Binary Tree, sumber: https://web.cecs.pdx.edu/~sheard/course/Cs163/Graphics/CompleteBinary.jpg - Skewed Binary Tree
3.1. Left and Right Skewed Binary Tree, sumber: https://www.tutorialride.com/images/data-structures/skewed-binary-tree.jpeg - Balanced Binary Tree
4.1. Balanced Binary Tree, sumber: https://upload.wikimedia.org/wikipedia/commons/thumb/0/06/AVLtreef.svg/251px-AVLtreef.svg.png
Sekian dan Terima Kasih! 😄
Comments
Post a Comment