Sunday, May 3, 2020

AVL Tree

AVL tree memiliki dasar binary search tree namun AVL tree membuat agar tree dapat berjalan dengan kecepatan mencari secepat O(logn). cara agar membuat binary search tree agar tetap seimbang adalah dengan menggunakan AVL tree. AVL tree bekerja dengan membandingkan tinggi dari tree bagian kiri dan kanan agar tetap seimbang dengan selisih 1 atau sama.

Gambar AVL tree 1.1,


AVL tree mempunyai dua fungsi yaitu insertion dan rotation. Insertion dalam AVL tree berbeda dengan binary search tree dimana AVL tree akan mengecek tinggi dari tree bagian kiri dan kanan. jika tinggi dari tree bagian kiri dan kanan selisih satu atau sama tingginya maka insertion akan ditambahkan tanpa memerlukan rotation. rotation adalah cara agar AVL tree dapat terjaga seimbang. ada 4 jenis rotasi dalam AVL tree yaitu single right rotation, single left rotation, left right rotation, dan right left rotation.   

Monday, April 6, 2020

Rangkuman


Data Structure
Data structure merupakan menata data-data yang ada agar mudah diakses atau diolah. Cara mengolah data dapat dilakukan dengan berbagai macam cara contohnya seperti linked list, binary search tree, dan hash table.

Linked list merupakan sebuah list dari sebuah data dimana data-data tersebut terhubung. Linked list menggunakan konsep pointer yang membuat sebuah linked list menjadi lebih fleksibel karena data dapat ditambah secara terus menerus tanpa harus mengubah size dari suatu array. Linked list memiliki berbagai macam pengembangan yaitu single linked list, double linked list, circular linked list. Single linked list merupakan sebuah data yang terhubung dengan data yang selanjutnya. Double linked list memiliki konsep yang sama dengan single linked list namun double linked list dapat mengakses data yang sebelumnya dan sesudahnya. Circular linked list memiliki konsep yang sama dengan linked list lainnya namun circular linked list tidak memiliki pointer yang menunjuk ke NULL. Penggunaan dari single linked list, double linked list, dan circular linked list memilki tujuan yang berbeda-beda sesuai kegunaannya. Jika ingin menggunakan program yang ringan namun dalam bentuk linked list silahkan gunakan single linked list karena pointer yang diatur cuman satu dan lebih menghemat memori dan pengembangan dari single linked list adalah stack dan queue. Double linked list digunakan jika ingin memudahkan dalam pemasukan dan penghapusan data akan tetapi double linked list lebih banyak menggunakan resource karena menggunakan pointer lebih banyak dari pada single linked list.

Binary search tree merupakan penerapan dari single linked list namun memilki dua pointer yang menunjuk ke kiri dan ke kanan. Binary search tree sangat sering digunakan untuk mencari sebuah data karena kecepatan dari binary search tree adalah O(logn) atau setara dengan binary search. Didalam sebuah binary tree tidak terdapat data yang sama karena dalam binary search tree hanya mencari jika data itu ada atau tidak.

Hash table merupakan proses untuk mengakses sebuah data dalam sebuah array dengan kecepatan O(1) yaitu dengan kecepatan konstan. Proses dari hash table dalam mencari data dalam sebuah array dengan kecepatan O(1) adalah dengan menyimpan data dalam aray tersebut dengan berbagai perhitungan sehingga mendapatkan posisi dimana data itu akan berada. Namun proses ini dapat menyebabkan sebuah data menyatu dalam satu array atau disebut dengan collision. Cara yang dapat dilakukan untuk mengatasi collision ini dapat menggunakan linked list agar dapat mencegah terjadi nya collision namun dapat menyebabkan hash table menjadi lebih lambat. Sehingga semakin complex perhitungan terhadap hash table tersebut maka kemungkinan untuk terjadinya collision akan menipis karena sebuah data tidak akan masuk dalam satu array yang sama.

Stack dan queue merupakan pengembangan dari konsep single linked list. Stack and queue memilki perbedaan yang sangat tipis. Dalam sebuah stack, jika ingin menghapus sebuah data maka kita akan menghapus data yang paling atas. Begitu juga sebaliknya, pada queue jika ingin menghapus sebuah data dalam queue maka akan menghapus data yang paling bawah.  



Code untuk dreammers market:

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


struct Data{
char nama[100];
int qty;
int harga;
struct Data *next,*prev;
}*head,*tail;

void input(char name[], int quan){
srand(time(0));
struct Data *curr = (struct Data*) malloc(sizeof(Data));
strcpy(curr->nama,name);
curr->qty = quan;
curr->next = NULL;
curr->prev = NULL;
curr->harga = (rand() % (100000 - 30000 + 1)) + 30000;
if(!head){
head = tail = curr;
}
else{
curr->next = head;
head->prev = curr;
head = curr;
}
}

struct Data edit(char name[]){
struct Data *curr = head;
if(!head) return *curr;
else{
while(strcmp(curr->nama,name) != 0){
curr = curr->next;
}
return *curr;
}
}

bool search(char name[]){
struct Data *curr = head;
if(!head) return true;
else if(strcmp(name,head->nama) == 0) return false;
else{
while(strcmp(name,curr->nama) != 0 && curr != NULL){
if(curr->next == NULL){
return true;
}
curr = curr->next;
}
return false;
}
}

bool hapus(char name[]){

if(!head) return false;
else if(head == tail){
if(strcmp(name,head->nama) == 0){
free(head);
return true;
}
else if(strcmp(name,head->nama) != 0){
return false;
}
}
else{
if(strcmp(name,head->nama) == 0){
struct Data *curr = head;
head = head->next;
head->prev = NULL;
free(curr);
curr->next = NULL;
return true;
}
else if(strcmp(name,tail->nama) == 0){
struct Data *curr = tail;
tail = tail->prev;
tail->next = NULL;
free(curr);
curr->prev = NULL;
return true;
}
else{
struct Data *curr = head;
while(strcmp(curr->nama,name) != 0){
if(curr->next == NULL) return false;
curr = curr->next;
}
curr->prev->next = curr->next;
curr->next->prev = curr->prev;
curr->next = NULL;
curr->prev = NULL;
free(curr);
return true;
}
}
}

int check_out(char name[]){
if(!head) return 0;
else if(head == tail){
if(strcmp(name,head->nama) == 0){
return head->harga * head->qty;
}
else if(strcmp(name,head->nama) != 0){
return 0;
}
}
else{
if(strcmp(name,head->nama) == 0){
return head->harga * head->qty;
}
else if(strcmp(name,tail->nama) == 0){
return tail->harga * tail->qty;
}
else{
struct Data *curr = head;
while(strcmp(curr->nama,name) != 0){
if(curr->next == NULL) return 0;
curr = curr->next;
}
return curr->harga * curr->qty;
}
}
}

int main(){
int menu;

do{
printf("1. Input barang\n");
printf("2. Edit barang\n");
printf("3. Hapus barang\n");
printf("4. Check Out\n");
printf("0. Exit\n");
printf("Pilihan: ");
scanf("%d",&menu);
if(menu == 1){
char name[100];
int quan;
do{
printf("Masukkan nama barang : ");
scanf("%s",name);
if(search(name) == false) printf("Nama barang sudah ada\n");
}while(search(name) == false);

do{
printf("\nMasukkan jumlah barang: ");
scanf("%d",&quan);
if(quan == 0) printf("Jumlah barang harus lebih dari 0\n");
}while(quan == 0);

printf("\n\nData anda sudah dimasukkan\n\n");
input(name,quan);
}
else if(menu == 2){
char name[100];
int edit_barang;
printf("Tolong input nama barang yang ingin kami edit : ");
scanf("%s",name);
struct Data temp = edit(name);
printf("Nama: %s\n",temp.nama);
printf("Jumlah barang: %d\n",temp.qty);
printf("Harga: %d\n\n",temp.harga);

printf("Silahkan edit barang anda (tanda \'-\' untuk kurang): ");
scanf("%d",&edit_barang);


printf("\n\nNama: %s\n",temp.nama);
printf("Jumlah barang: %d\n",temp.qty + edit_barang);
printf("Harga: %d\n",temp.harga);
}
else if(menu == 3){
char name[100];

printf("Masukkan nama barang yang ingin di hapus: ");
scanf("%s",name);

if(hapus(name) == false) printf("Barang tidak ada\n\n");
else printf("Barang sudah dihapus\n\n");

}
else if(menu == 4){
char name[100];
printf("Masukkan barang yang anda ingin check-out: ");
scanf("%s", name);
if(check_out(name) == 0) printf("Barang tidak ditemukan\n\n");
else{
printf(" Total harga barang = %d (free)\n", check_out(name));
int beli;
printf("Beli:\n1. Ya\n2. Tidak\n");
printf("Pilihan: ");
scanf("%d",&beli);
if(beli == 1) {
hapus(name);
printf("Kindness is free\n\n");
}
}
}
}while(menu != 0);
}

Wednesday, March 25, 2020

Binary Tree

Binary Tree
A tree whose elements have at most 2 children is called a binary tree. Since each element in a binary tree can have only 2 children, we typically name them the left and right child. the speed of searching in binary tree is O(nlogn) that means that it runs faster as binary search. the concept of binary tree is similar to double linked listed but it has 2 pointer which point to left and right. the function of using binary tree is to check a number with fast search.



Sunday, March 15, 2020

Hash Table and Binary Tree

Hash Table
Hash Table is a data structure that storing data in array. the purpose of hash table is to make the fast searching if you want to search for the data in the array with using a key to find a direct index.

                                          Picture 1.1,

Using hash table we calculate our data into the key with anyway and the key will refer to the index. that is why we can find our data with speed O(1). but there is some problem when we make hash table, it is collision. collision is when your data data is being stored in the same array with the another data because the key is the same.

How to fix a collision in our hash table? to fix the problem we can use linked list into our hash table.
to be exact you can see the picture number 1.1 it's already describe the solution if collision occur.


Binary Tree
Binary tree is implementation of linked list. in Binary tree we have 2 references which refer to left and right. the top of the node is called "root" and the bottom one is called "leaf". to find a data binary tree speed is O(n log(n)) but the data is already been sorted from the start.

The example of binary tree:


Block Chain
Block chain is linked every record (or box) with each other using public key and private key.
in current technology, block chain is used for making cryptocurrency such as bit coin. block chain can be implement at business at financial support example is Asset Management: Trade Processing and Settlement.

Source :
https://www.cs.cmu.edu/~adamchik/15-121/lectures/Trees/trees.html
https://www.researchgate.net/profile/Erin_Hastings/publication/228958917/figure/fig1/AS:340199050629120@1458121182977/An-example-of-mobile-objects-in-a-grid-a-hash-table-and-the-object-index.png
https://blockgeeks.com/guides/blockchain-applications/

Learn More :
https://www.youtube.com/watch?v=KyUTuwz_b7Q
https://blockgeeks.com/guides/blockchain-applications/