Hashing table & Binary Tree

Hashing and Hash Table

Hashing adalah transformasi string karakter menjadi nilai panjang tetap yang lebih pendek atau menjadi sebuah kunci yang mewakili string aslinya. Hashing digunakakn untuk mengindeks dan mengambil item dalam database karena lebih cepat menemukan item menggunakan kunci hahs yang lebih pendek daripada menemunkannya mengginakan nilai asli. Hashing juga bisa didefinisikan sebagai konsep yang mendistribusikan kunci ke dalam array yang biasa disebut "Hash Table" yang menggunakan sebuah fungsi yang biasa disebut "Hash Function". Hash Table ada table yang berupa array yang merupakan tempat dimana kita menyimpan string yang asli. Index yang terdapat pada tabel adalah hashed key atau key yang telah didapat melalui suatu proses sementara isi dari array tersebut adalah original stringnya. Biasanya ukuran dari Hash Table ini cukup kecil sehingga memungkinkan untuk menghasilkan hashed key atau kunci yang sama.

Hash Function

Ada berbagai macam cara untuk transformasi string untuk menjadi sebuah key. Berikut adalah beberapa method yang penting untuk membentuk Hash Function :

  1. Mid-square
  2. Division
  3. Folding
  4. Digit Extraction
  5. Rotating Hash

Collision

Pada sebelumnya sudah saya katakan bahwa akan ada kemungkinan untuk suatu string menghasilkan key yang sama. Hal ini biasa disebut Collision. Untuk mengatasi hal tersebut maka 2 cara untuk mengatasi kejadian ini :
  • Linear Probing
          Mencari slot kosong disebelahnya dan memasukkannya pada slot kosong tersebut.
  • Chaining
          Meletakkan string pada slot tersebut dengan cara chained list (linked list).

Trees & Binary Tree

Untuk memahami Trees & Binary Tree, lebih baik kita memahami terlebih dahuli bagaimana konsep dari Tree dan Binary Tree. Berikut gambar dari konsep Trees dan Binary Tree.
Berikut sebuah codingan simple tree di C
struct node  
    int data; 
    struct node *left; 
    struct node *right; 
}; 
  
struct node* newNode(int data) 
{  
  struct node* node = (struct node*)malloc(sizeof(struct node)); 
  
  node->data = data; 
  
  node->left = NULL; 
  node->right = NULL; 
  return(node); 
  
  
int main() 

  struct node *root = newNode(1);   
  root->left        = newNode(2); 
  root->right       = newNode(3); 
  root->left->left  = newNode(4); 

  getchar(); 
  return 0; 
}

Komentar

Postingan populer dari blog ini

AVL Tree

HEAP and TRIES

Summary