Hash Table

Hash Table serta implementasi di BlockChain


Hash Table adalah struktur data yang mengimplementasikan tipe data abstrak dari sebuah array asosiatif, serta struktur yang dapat memetakan kunci ke nilai.
secara singkatnya adalah Table yang menyimpan data dan hanya dapat diakses orang yang mempunyai kunci / keynya (Seperti Locker).

Di Hash Table sendiri sering adanya Collision karena cara input datanya dengan cara menggunakan fungsi random dan itu dapat diselesaikan dengan 2 Cara yaitu Chainning / Linear Probing.Chainning adalah suatu cara yang digunakan apabila fungsi hashing dalam hash Table memasukan data yang sama ke dalam bucket yang sama / kolom yang sama maka akan membentuk suatu penyambung baru (pointer) dan akan berbentuk seperti chain.Sedangkan Linear Probing data tersebut akan turun ke bawah dan membuat penunjuk ke bawahnya agar data tersebut dapat di akses.

Lalu untuk implementasinya di block chain biasanya data yang banyak akan di hashing ke hash table dan juga digunakan Teknik Chainning agar tidak mengalami Collision dan menstore data lebih aman karena apabila orang tidak mempunyai key tidak dapat mengakses value di dalam hash table tersebut.

Juga apakah masih relevan untuk Blockchain yang sekarang?

Tidak karena Dalam komputasi, Hash adalah struktur data yang mengimplementasikan tipe data abstrak dari sebuah array asosiatif, serta struktur yang dapat memetakan kunci ke nilai. Tabel hash menggunakan fungsi hash untuk menghitung indeks ke dalam array dari ember atau slot, dari mana nilai yang diinginkan dapat ditemukan sedangkan block chain adalah buku besar digital di mana transaksi yang dilakukan dalam bitcoin atau mata uang digital lain dicatat secara kronologis dan terbuka agar dapat dilakukannya tracking terhadap transaksi tertentu.

Meski seperti itu kita tetap dapat membuat blockchain kecil dengan Hash Table.

Tapi untuk saat ini saya akan hanya mencontohkan hash table



#include <stdio.h>
#include <stdlib.h>

struct value{
    int key;
    int stored;
};

struct value *array;
int capacity = 10;
int size = 0;

int hashing(int key){
    return(key % capacity);
}

void init(){
    int i;
    capacity = 10;
    array = (struct value*)malloc(capacity * sizeof(struct value));
    for(i = 0 ; i<capacity ; i ++){
        array[i].key = 0;
        array[i].stored = 0;
    }
}

void insert(int key,int value){
    int index = hashing(key);
    if (array[index].stored == 0){
        array[index].key = key;
        array[index].stored = value;
        size++;
    }
    else if(array[index].key == key){
    array[index].stored = value;
    }
}

void remove(int key)
{
    int index  = hashing(key);
    if(array[index].stored == 0){
        printf("This key does not exist \n");
        getchar();
    }
    else{
        array[index].key = 0;
        array[index].stored = 0;
        size--;
    }
}

void display(){
    int i;
    for (i = 0; i < capacity; i++){
        if (array[i].stored == 0){
            printf("The Table Has no elements \n");
        }
        else {
            printf("Array[%d] have value : key(%d) and value(%d)\n", i, array[i].key, array[i].stored);
        }
    }
}

int sizeHash(){
    return size;
}

int main(int argc, char **argv){
    int choose = 0,key = 0,value = 0,n = 0, go = 0;
   
    init();
   
    do {
        system("cls");
        printf("Implementation of Hash Table in C\n");
        printf("---------------------------------\n");
        printf("1. Inserting item in the Hash Table\n");
        printf("2. Removing item from the Hash Table\n");
        printf("3. Check the size of Hash Table\n");
        printf("4. Display a Hash Table\n");
        printf("0. Exit.\n\n");
        printf("Choose >> ");
        scanf("%d", &choose);getchar();
            switch(choose){
            case 1:{
                printf("Enter key: ");
                scanf("%d", &key);
                printf("Enter Value: ");
                scanf("%d",&value);
                insert(key,value);
                break;
            }
            case 2:{
                printf("Enter the key to delete: ");
                scanf("%d", &key);
                remove(key);
                printf("\n\nPress Enter To Continue!");
                getchar();
                main(argc,argv);
                break;
            }
            case 3:{
                n = sizeHash();
                printf("The size of Hash Table is: %d\n", n);
                printf("\n\nPress Enter To Continue!");
                getchar();
                main(argc,argv);
                break;
            }
            case 4:{
                display();
                printf("\n\nPress Enter To Continue!");
                getchar();
                main(argc,argv);
                break;
            }
            case 0:{
                break;
            }
            default:{
                printf("Wrong Input\n");
                printf("\n\nPress Enter To Continue!");
                getchar();
                main(argc,argv);
                break;
            }
        }
    }while(choose != 0);
    return 0;
}

Komentar