Tuesday 27 March 2018

Pertemuan 5 - Binary Search Tree - 2101696973 - Rifqi Amru Bakti

Nama : Rifqi Amru Bakti
NIM    : 2101696973

Session 5
Binary Search Tree

Binary Search Tree : 
Binary Search Tree(BST) adalah sebuah bentuk data struktur yang menyimpan "barang"(integer angka, char nama, dll) dalam memori. BST mampu melakukan pencarian cepat, penambahan, penghapusan barang, dan dapat digunakan untuk mengimplementasikan set item atau tabel pencarian yang memungkinkan penemuan barang berdasarkan kuncinya (seperti menemukan nomor HP melalui nama orang).BST merupakan sebuah "Rooted Binary Tree", dimana pada tiap node tersimpan sebuah kunci dan juga memiliki 2 "Sub-Tree" biasa dipanggil "Left" and "Right"(kiri dan kanan).

Sering sekali informasi yang direpresentasikan pada tiap node merupakan sebuah rekaman daripada satu data elemen. Namun, untuk kegunaan sequence, node dibandingkan sesuai dengan kunci yang dimiliki mereka daripada bagian manapun yang terikat dengan mereka. Keuntungan paling besar dalam penggunaan BST dibandingkan data struktur lain ialah hal-hal yang berhubungan dengan algoritma sorting dan searching relatif lebih efisien dan juga lebih mudah dikoding.

Operasi Binary Search Tree
BST memiliki operasi dasar ini :
- find(x) : mencari kunci x dalam BST
- insert(x) : memasukkan kunci x baru dalam BST
- remove(x) : menghapus kunci x dalam BST

Operasi Searching
Operasi Searching BST untuk mencari suatu kunci dapat diprogram secara rekursif dan iteratif.

Karena properti dari BST, mencari kunci dalam BST itu mudah.
Misal kunci yang ingin dicari adalah X.
- Dimulai dari root(akar)
- Jika root mengandung X search berhenti dengan suksess
- Jika X kurang dari kunci root, maka search akan rekursif ke Left Sub-tree, sebaliknya jika X lebih dari kunci root search akan ke Right Sub-tree.

struct node*search(struct node*curr,intx){
if(curr==NULL)return NULL;

//X ditemukan
if(X==curr->data)return curr;

//X ada pada Left Sub-tree
if(X<curr->data)return find(curr->left X);

//X ada pada Right Sub-tree
return find(curr->right,X);
}

Operasi Insert
Operasi InsertBinary Searcg Tree(pemasukan data) dilakukan secara rekursif.

Misal Node baru adalah X
- Dimulai dari root
- Jika X kurang dari kunci milik root X pergi ke Left Sub-tree, dan sebaliknya jika X llebih dari kunci milik root
- Diulang sampai ditemukan node kosong untuk menaruh X(X selalu menjadi Leaf baru)

if TREE=NULL, maka
alokasikan memori untuk TREE
     set TREE->data=value
     set TREE->left=TREE->right=NULL
else
if value<TREE->data
     insert(Tree->left,value)
else
     insert(Tree->right,value)

misal insert "4"

BST insertion example, step 1BST insertion example, step 2
BST insertion example, step 3BST insertion example, result
- 4 kurang dari 5, pergi ke kiri
- 4 lebih dari 2, pergi ke kanan
- 4 lebih dari 3, pergi ke kanan
- 4 sampai pada node kosong dan menjadi Leaf baru

Operasi Deletion
Ada 3 kasus yang harus dipikirkan ketika melakukan Dletion:
- Jika kuncinya merupakan sebuah Leaf, node didelete langsung
- Jika kunci merupakan node yang punya 1 Sub-tree, delete node tersebut dan sambungkan Sub-tree yang tadi pada Parents node yang terdelete
- Jika kunci merupakan node yang memiliki 2 Sub-tree, delete node tersebut dan digantikan dengan anak paling kanan dari Sub-tree kirinya atau anak paling kiri dari Sub-tree kanannya lalu delete anak yang digunakan

if Tree=NULL, maka
tulis "value not found in the tree"
else if value<Tree->data
     delete(Tree->left,value)
else if value>Tree->data
     delete(Tree->right,value)
else if Tree->left dan Tree->right
set temp=cariNodeTerbesar(Tree->left)
set Tree->data=temp->data
delete(Tree->left,temp->data)

Image result for binary search tree deletion

- Bagian pertama menunjukkan delesi dari sebuah Leaf
- Bagian kedua menunjukkan delesi sebuah node dengan 1 anak
- Bagian ketiga menunjukkan dlesi node yang memiliki 2 anak


Rifqi Amru Bakti-2101696973

Tuesday 20 March 2018

Pertemuan 4 - Introduction to Tree, Binary Tree and Expression Tree - 2101696973 - Rifqi Amru Bakti

Nama : Rifqi Amru Bakti
NIM    : 2101696973


Session 4
Introduction to Tree, Binary Tree and Expression Tree


Tree & Binary Tree:

- Konsep Tree 
- Konsep Binary Tree 
- Tipe-tipe Binary Tree 
- Properti Binary Tree 
- Representasi Binary Tree 
- Membuat Expresi Tree dari Prefix, Postfix dan Infix

Konsep Tree

Sebuah Tree adalah kumpulan dari satu atau lebih node.
Image result for data structure Tree
- Note yang ada di paling atas dipanggil dengan Root
- Garis yang menyambungkan Node "Child" dengan Node "Parent" dipanggil          dengan Edge
- Node yang tidak memiliki anak dipanggil dengan Leaf Node
- Node yang memiliki "Parent" yang sama dipannggil dengan Sibling Node
- Degree node ialah total node anak yang ada di dalam Tree
- Height/Depth(Tinggi/Kedalaman) adalah Degree node maximal dalam            sebuah Tree
- Jika ada garis yang menghubungkan A ke B berarti B adalah                              Descendant(Keturunan) dari A dan A adalah Ancestor(Leluhur) dari B

Konsep Binary Tree

- Binary Tree adalah bentuk data structure pohon berakar dimana tiap Node        hanya memiliki anak paling banyak 2.
- Kedua anak tersebut dipanggil dengan Left Child(anak kiri) dan Right                Child(anak kanan).
- Node yang tidak memiliki anak dipanggil dengan Leaf.
Image result for binary tree

Tipe-tipe Binary Tree
- Perfect Binary Tree
Perfect Binary Tree adalah tipe binary tree dimana tiap level memiliki              kedalaman(depth) yang sama.
Image result for perfect binary tree

- Complete Binary Tree
Complete Binary Tree adalah binary tree dimana pada tiap tingkat, kecuali        yang terakhir terisi penuh, dan semua Node sejauh mungkin terpisah. Binary Tree yang sempurna adalah Complete Binary Tree.
Image result for complete binary tree

- Skewed Binary Tree
Skewed Binary Tree adalah bentuk binary tree dimana pada tiap node anak yang dimiliki paling banyak hanya satu.
Image result for skewed binary tree

- Balanced Binary Tree
Balanced Binary Tree adalah binary tree dimana tiada Leaf yang jauh dari Root daripada Leaf lainnya.
Image result for balanced binary tree

Properti Binary Tree
- Jumlah maximal node pada level k dari sebuah binary tree adalah 2^k.
- Jumlah maximal node pada binary tree dengan tinggi H adalah (2^(H+1))-1.
- Tinggi minimum dari sebuah binary tree dengan n Node adalah (2log(n)).
- Tinggi maximum dari sebuah binary tree dengan n Node adalah n-1.

Representasi Binary Tree
Representasi sebuah binary tree menggunakan Array dan Linked List Image result for representation of binary tree
Membuat Expresi Tree dari Prefix, Postfix dan Infix

Image result for binary tree infix traversal
Prefix : F-B-A-D-C-E-G-I-H
Infix         : A-B-C-D-E-F-G-I-H
Postfix : A-C-E-D-B-H-I-G-F



Rifqi Amru Bakti-2101696973

Tuesday 13 March 2018

Pertemuan 3 - Linked Lists Implementation 2 - 2101696973 - Rifqi Amru Bakti

Nama : Rifqi Amru Bakti
NIM    : 2101696973


Session 3
Linked Lists Implementation 2


Topic : 
- Konsep Stack
- Stack dengan Array dan Linked List
- Notasi Infix, Prefix, dan Postfix
- Evaluasi

Stack
Stack adalah sebuah data struktur penting yang menyimpan semua elemen dengan rapih dan teratur.

Analogi Stack
Anggap data struktur stack sebagai kumpulan piring yang tersusun dengan cara ditumpuk. ketika anda ingin mengambil sebuah piring, piring yang terambil ialah piring teratas atau piring pertama. Karena ini anda dapat menambah atau menghilangkan sebuah elemen (piringnya) hanya dari satu posisi yaitu posisi teratas.

Konsep Stack
Stack adalah bentuk data struktur yang linear yang dapat di implementasikan    dengan menggunakan array atau linked list.
- Elemen-elemen yang ada di dalam sebuah stack ditamnahkan dan dikurangi      hanya dari sati posisi, posisi tersebut dipanggil top atau atas.
- Data yang tersimpan dengan stack tersimpan dengan cara "Terakhir Masuk        Keluar Duluan".

Representasi Array dalam Stack
Stack memiliki dua variabel : 
- TOP yang digunakan untuk menyimpan alamat elemen paling atas dalam          stack tersebut.
- MAX yang digunakan untuk menyimpan angka maximal sebuah elemen yang      dapat disimpan stack tersebut.
If TOP=NULL, ini mengindikasikan bahwa stack sedang kosong.

If TOP=MAX-1, berarti stack tersebut sudah penuh.

TOP=4, penginputan dan penghapusan akan dilakukan dalam posisi ini.

Representasi Linked List dalam Stack
Teknik pembuatan stack menggunakan array lebih mudah dipakai, akan tetapi terdapat kesulitan dalam penggunaan array. Kesulitannya ialah array tersebut harus di deklarasikan supaya memiliki ukuran yang tetap.


- Dalam linked list stack, tiap node memiliki dua bagian : 
  -> Yang menyimpan data.
  -> Yang menyimpan alamat node selanjutnya.

- Pointer START dalam linked list digunakan sebagai TOP.
- Semua penginputan dan penghapusan terjadi pada node yang tertunjuk oleh      TOP.

- If TOP=NULL, ini mengindikasikan bahwa stack tersebut kosong.

Operasi Stack
push(x) : menambahkan suatu elemen x kepada atas stack (TOP). 
pop() : menghapuskan suatu elemen dari atas stack (TOP).

top()         : menunjukan atau mengembalikan elemen top dari stack.

Notasi Infix, Prefix, dan Postfix
Terdapat tiga buah notasi aritmatika yang telah diketahui : 
- Prefix Notation
- Infix Notation
- Postfix Notation
Prefix : Operator ditulis sebelum operand.
Infix         : Operator ditulis ditengah operand.
Postfix : Operator ditulis setelah operand.

Evaluasi

Postfix Evaluation
Scan dari kiri ke kanan
7   6   5   x   3   2   ^   –    + , Scan sampai operator pertama
7   6   5   x   3   2   ^   –    + , Hitung 6x5
7   30           3   2   ^   –    + , Scan lagi hingga operator selanjutnya
7   30           3   2   ^   –    + , Hitung 3^2
7   30           9             –    + , Scan lagi sampai operator selanjutnya
7   30           9             –    + , Hitung 30-9
7   21                                + , Scan Lagi
7   21                                + , Hitung 7+21
28         , Selesai

Infix Evaluation
Misal Infix = 4 + 6 * (5 – 2) / 3.

Untuk mengevaluasi notasi Infix, kita harus mencari operator dengan prioritas tertinggi dalam string tersebut.

4 + 6 * (5 – 2) / 3 Cari operator dengan prioritas tertinggi, ditemukan ( )
4 + 6 * 3 / 3 Cari operator dengan prioritas tertinggi, ditemukan *
4 + 18 / 3         Cari operator dengan prioritas tertinggi, ditemukan  /
4 + 6 Cari operator dengan prioritas tertinggi, ditemukan +

10                            Selesai

Prefix Evaluation
Scan dari kanan ke kiri
+   7   –   x   6   5   ^   3   2   
+   7   –   x   6   5   ^   3   2   
+   7   –   x   6   5   9           
+   7   –   x   6   5   9           
+   7   –   30           9          
+   7   –   30           9          
+   7   21                           
+   7   21                           

28                                     
Penghitungan sama seperti pada Postfix, hanya saja posisi operator dibalik.

Rifqi Amru Bakti-2101696973