Skip to main content

Hash Table and Binary Tree


Hash Table

Hashing
Hashing adalah transformasi aritmatik sebuah string atau karakter menjadi nilai yang merepresentasikan string aslinya.           

Hashing digunakan sebagai metode untuk menyimpan data di dalam sebuah array agar penyimpanan, penambahan, dan pencarian data dapat dilakukan dengan benar.     

Hash Table
Hash table adalah table (array) dimana kita menyimpan suatu string asli, dimana index dari array adalah suatu kunci yang dienkripsi (hashed key ), namun nilainya adalah string yang asli.

Ukuran dari hash table biasanya terdiri dari berbagai macam urutan, namun biasanya lebih sedikit dari berbagai kemungkinan string. Jadi, beberapa string kemungkinan mempunyai hashed key yang sama.

Hash Function
Hashing adalah salah satu bagian penting dari data structure dimana didesain oleh suatu fungsi yang dinamakan hash function yang digunakan untuk memetakan suatu nilai dengan suatu ciri yang spesifik untuk akses elemen yang lebih cepat.

Misalkan untuk fungsi H(x) akan memetakan nilai x yang disimpan di
index x%10, maka data {11,13,15,17,19 } akan disimpan secara berturut-turut akan disimpan di index { 1,3,5,7,9 } di dalam array.

Beberapa metode untuk membuat Hash Function :
Ø Mid – Square
Ø Division
Ø Folding
Ø Digit Extraction
Ø Rotating Hash





Mid-Square
Function: h(k) = s
k  = key
s  = hash key yang diperoleh dari nilai tengah kuadrat k

·        kuadratkan string/identifier (k), lalu kita ambil angka tengah dari kuadrat string/identifier untuk dijadikan hash key (s)

Division
Function: h(z) = z mod M
z  = key
M = angka yang digunakan untuk membagi key

·        ketika ingin memunculkan index dan meletakkan key di index hasil function division

Folding
·       bagi key menjadi beberapa bagian
·       jumlahkan bagian individualnya

Digit Extraction
·       beberapa bagian digit dari key akan dijadikan hash address
·        contoh :
x = 12350. Jika kita mengambil angka ke 1, 2, dan 4, maka kita akan mendapatkan hashcode : 125.

Rotating Hash
·       gunakan metode apa saja, lalu urutan angka akan dibalik ( misalkan division atau mid-square )
·       setelah mendapatkan hash code dari hash method, lakukan rotation
·       rotation adalah dijalankan dengan menggeser digit untuk mendapatkan hash address yang baru.
·       contoh :
hash address awal = 27201
hasil rotation = 10272

Collision
·       ketika kita ingin menyimpan string menggunakan hash function sebelumnya ( menggunakan karakter pertama dari setiap string )
·       misalkan kita ingin mendeklarasikan tipe data float, exp, char, atan, ceil, acos, floor
·       maka kita akan menemukan kesamaan di tipe data float dan floor, serta tipe data char dan ceil. Ini terjadi karena kedua pasang tipe data memiliki awalan karakter yang sama, sehingga mempunyai hash key yang sama.
·       disinilah terjadi collision

Ada dua solusi umum untuk mengatasi collision :
1.   Linear Probing
mencari tempat selanjutnya yang kosong dan meletakkan string di tempat tersebut
2.   Chaining
meletakkan string sebagai linked list


Trees and Binary Tree
Tree Introduction
·        Tree adalah non-linear data structure yang merepresentasikan relasi antara objek atau data
·        Beberapa tree bisa dilihat di dalam directory structure ataupun organizational hierarchies
·        Node dari tree harus disimpan terus menerus dan bisa disimpan dimana saja, serta dihubungkan oleh pointer

 
DEGREE of TREE = 3
DEGREE of C = 2
HEIGHT = 3
PARENT of C = A
CHILDREN of  A = B, C, D
SIBILING of F = G
ANCESTOR of F = A, C
DESCENDANT of C = F, G

Tree Concept
·        node di posisi paling atas disebut root
·        garis yang menghubungkan parent dan child disebut edge
·        node yang tidak mempunyai children disebut leaf
·        node yang mempunyai parent yang sama disebut sibling
·        degree adalah total sub tree dari sebuah node ( jumlah descendant )
·        height / depth adalah degree maksimum dari sebuah node di dalam tree
·        jika ada garis yang menghubungkan p dengan q, maka p disebut ancestor dari q, serta q disebut descendant dari p

Binary Tree Concept
·       binary tree adalah tree di dalam data structure yang mempunyai paling banyak dua children
·       kedua children tersebut biasa disebut left child dan right child
·       node yang tidak mempunyai children disebut leaf


Text Box: - adalah binary tree dengan 9 node, rooted di node bernomor 18 

- leaf node yang bernomor 9,12, dan 23
Types of Binary Tree
·        Perfect Binary Tree adalah binary tree dengan level yang berjumlah sama dengan height/depth
·        Complete Binary Tree adalah binary tree dengan level yang berjumlah sama dengan height/depth, namun hampir terisi sempurna
·        Skewed Binary Tree adalah binary tree yang setiap nodenya mempunyai paling banyak satu child
·        Balanced Binary Tree adalah binary tree dimana tidak ada leaf yang garisnya lebih Panjang dari leaf lainnya




Property of Binary Tree

bt-5.gif

·     maksimum jumlah node dari level k adalah
·        beberapa sumber menyebutkan bahwa level dari binary tree dimulai dari 1 (root)
·       height dari sebuah tree adalah total dari level diluar dari root
·       gambar di atas memiliki height sebanyak 3 ( dimana level 0 tidak dihitung karena mengandung root )
·     height minimum dari binary tree dengan n node adalah
·       height maksimum dari binary tree dengan n node adalah n-1

·        Skewed Binary Tree memiliki height yang maksimum
(dengan node minimum, bisa membuat height yang maksimum)



Representation of Binary Tree

o   Implementasi dengan array

-      Index di array menunjukkan nomor node
-      Index 0 adalah node root
-      Index left child adalah 2p + 1, dimana p adalah parent index
-      Index right child adalah 2p + 2
-      Index parent adalah ( p – 1 ) / 2




o   Implementasi dengan linked list
Text Box: struct node {
 int data;
 struct node *left;
 struct node *right;
 struct node *parent;
};
struct node *root = NULL;




Expression Tree Concept

Text Box: Prefix  : *+ab/-cde
Postfix : ab+cd-e/*
Infix  : (a+b)*((c-d)/e)

exp-2.gif




Threaded Binary Tree
Threaded Binary Tree adalah binary tree yang memiliki cara menunjuk pointer NULL yang berbeda dengan binary tree

Text Box: Binary Tree without ThreadingHasil gambar untuk binary tree without threading


Text Box: Binary Tree with Linked List Representation


Comments

Popular posts from this blog

AVL Tree

AVL Tree adalah Binary Tree yang sudah dapat melakukan self-balancing terhadap node di dalam tree-nya Dalam AVL Tree, terdapat 3 komponen utama yaitu: Key / Data yang bersifat unik Level ( perhitungan dari root sampai node / leaf terjauh ) Balance Factor ( perbedaan level dari anak kiri dan anak kanan ) Dalam Gambar, yang diberi warna biru muda memiliki: Key = 75 Level = 3 ( dihitung dari key 100, key 50, dan key 75 ) Balance Factor = 0, yang dilihat dari level anak kiri 75 yaitu, 65 dan anak kanan 75 yaitu, 85, maka 1-1 = 0 Balance Factor dapat dilihat sebagai berikut :  Leaves selalu memiliki balance factor 0 dan level 1 karena leaves adalah node terujung dan tidak memiliki anak  Dari leaves ke induknya, maka balance factor dan level dihitung dengan ketentuan:  Level Induk = [Level tertinggi anak] + 1 Balance Factor = [Level anak kiri] - [Level anak kanan] Sebuah node tidak boleh memiliki Balance Factor lebih dari 1. Jika terdapat node yang memiliki n

Heap & Tries

Heap Heap adalah struktur data yang berbentuk pohon yang merupakan jenis dari binary tree. Heap juga mempunyai karakter dimana masing-masing node mempunyai maksimum dua children sebagaimana terdapat di dalam binary tree. Heap juga merupakan complete binary tree yang memenuhi sifat - sifat heap. Heap Property Min Heap dimana setiap key dalam node bernilai lebih kecil dari children-nya Max Heap dimana setiap key dalam node bernilai lebih besar dari children-nya Min Heap Setiap key dalam node bernilai lebih kecil dari key children-nya. Key yang bernilai paling kecil berada di root. Key yang bernilai paling besar berada di salah satu dari node leaves. Heap bisa diimplementasikan menggunakan linked list, namun lebih mudah diimplementasikan dengan menggunakan array Applications of Heaps Heap Sort Selection Algorithm Graph Algorithm Selection Algorithm menemukan key minimum atau maksimum, mencari median, dan menentukan elemen k ter

Summary of Data Structures ( 1st Semester )

Single Linked List Circular Single Linked List Circular adalah Single Linked List yang pointer selanjutnya menunjuk ke dirinya sendiri. Jika terdiri dari beberapa node, maka pointer next pada node terakhir akan menunjuk ke pointer terdepan.            Single :  artinya field pointer-nya hanya satu buah saja dan satu arah. Circular :  artinya pointer next-nya akan menunjuk ke dirinya sendiri sehingga akan membuat sebuah sirkuit atau sirkular Ilustrasi -           Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya yang juga memiliki field yang berisi data -           Pada akhir linked list, node terakhir akan menunjuk ke node terdepan sehingga linked list tersebut berputar. Node terakhir akan menunjuk lagi ke head. Rangkaian Single Linked List tersebut diawali dengan sebuah head untuk menyimpan alamat awal dan diakhiri dengan node yang mengarah ke pointer null yang akan menunjuk ke salah satu node kembali. Double Linked L