Postingan

AVL Tree

Gambar
AVL Tree merupakan pengembangan dari Binary Search Tree. AVL Tree memberikan kompleksitas yang lebih rendah, khususnya dalam worst case, karena AVL Tree menyeimbangkan root-root dari Binary Search Tree. Dalam melakukan insertion, deletion dan searching, kompleksitasnya sangat dipengaruhi oleh tinggi dari pohon tersebut. Apabila Binary Search Tree memiliki cabang yang cenderung timpang, misal kebanyakan data berada di sisi kiri sementara sisi kanan kosong, itu berpengaruh terhadap kompleksitasnya sendiri. Dan AVL Tree menyelesaikan masalah ini dengan menyeimbangkan cabang-cabangnya sehingga tidak terlalu timpang. Ini yang disebut dengan Balanced Binary Search Tree dan AVL Tree ini merupakan salah satu dari bentuk Balanced Binary Search Tree. Tinggi sebuah node: - Tinggi dari sebuah subtree kosong adalah 0 - Tinggi leaf adalah 1 Balance Factor: Perbedaan tinggi antara subtree kiri dan subtree kanan dari sebuah node *Balance factor sebuah node hanya boleh paling besar 1 ...

Code

Gambar
-------------------------------------------------------------------------------------------------------------------------- #include <stdio.h> #include <string.h> #include <stdlib.h> struct product{ char productName[31]; int qty; int price; struct product *next, *prev; } *head = NULL, *tail = NULL, *curr; void addProduct(char *productName, int qty){ curr = (struct product*)malloc(sizeof(struct product)); strcpy(curr->productName, productName); curr->qty = qty; curr->price = rand() % 1000000; if(curr->price == 0) curr->price = curr->price + 1000; else if(curr->price < 10) curr->price = curr->price * 1000; else if(curr->price < 100) curr->price = curr->price * 100; else if(curr->price < 1000) curr->price = curr->price * 10; curr->next = curr->prev = NULL; if(head == NULL){ head = tail = curr; } else if (strcmp(p...

Review (Week 6)

Gambar
LINKED LIST Single Linked List Single Linked List merupakan Linked List yang hanya terhubung ke data berikutnya. Codingan dasar dalam membuat Linked List: struct node { int nilaiData;     struct node *next; }; struct node *head = NULL; struct node *tail = NULL; Circular Single Linked List Circular Single Linked List memiliki bentuk yang sedikit berbeda dengan Single Linked List. Tail->next pada Single Linked List menunjukkan nilai NULL, sedangkan pada Circular Single Linked List, tail->next menunjuk pada head. Sehingga tidak terdapat NULL dalam Circular Single Linked List. Dalam codingan, hanya perlu sedikit modifikasi, yaitu dengan mengubah pointer next pada nilai terakhir menunjuk nilai dari head. Hal ini berlaku untuk insertion dan deletion. Double Linked List Double Linked List merupakan Linked List yang terhubung dengan data berikutnya dan data sebelumnya. struct node { int nilaiData;    struct n...

Binary Search Tree

Gambar
Binary Search Tree merupakan struktur data yang mendukung pencarian dan sorting yang cepat, dan juga memudahkan insertion dan deletion. Binary Search Tree disebut juga Binary Tree yang sudah disorting. Dalam sebuah node pada Binary Search Tree: - Subtree kiri terdiri atas elemen yang lebih kecil - Subtree kanan terdiri atas elemen yang lebih besar Operasi dalam Binary Search Tree - find(x) = menemukan x dalam BST - insert(x) = memasukkan elemen baru ke dalam BST - remove(x) = menghapus elemen x dari BST Operasi: Search - Mulai pencarian dari root - Jika root merupakan elemen yang kita cari, maka pencarian selesai - Jika x lebih kecil root, lakukan pencarian secara rekursif ke bagian kiri sub tree BST, begitu pula jika lebih besar, lakukan pencarian secara rekursif ke bagian kanan sub tree BST. Itu berlaku untuk pencarian ke node berikutnya. Operasi: Insertion - Mulai dari root - Jika x lebih kecil node's key, kemudian masukkan x ke sub tree kiri, jika lebih b...

Hashing dan Hash Tables, Trees, dan Binary Trees (Week 4)

Gambar
Pada pertemuan sebelumnya, saya telah mempelajari Linked List, yang dimana merupakan kumpulan data dinamis yang saling terhubung antar satu sama lain. Terdapat single linked list, double linked list, circular single linked list, dan circular double linked list. Untuk materi kali ini, linked list juga akan terpakai dalam hashing dan binary trees. HASHING DAN HASH TABLE Hashing merupakan teknik mengubah setiap record menjadi angka (hash). Kumpulan dari karakter dalam sebuah record diubah dalam bentuk yang lebih pendek (kata kunci) yang merepresentasikan kumpulan karakter itu sendiri. Keunggulan hashing ini adalah waktu aksesnya yang cukup cepat sehingga waktu yang dibutuhkan dalam penambahan, penghapusan, dan pencarian lebih singkat. Jadi, hashing ini mendistribusikan kunci-kunci dalam sebuah array yang disebut hash table, dengan menggunakan fungsi-fungsi yang disebut hash function. Contoh hash table: Misalkan kita ingin menyimpan nama mahasiswa berupa: Doni, Andi, B...