Tuesday, March 17, 2020

Binary Search Tree

Materi Data Structure 17 Maret 2020

Hal yang akan dibahas pada pertemuan kali ini yaitu :
1. Binary Search Tree
2. Binary Search Tree Operations

1. Binary Search Tree
    Binary Search Tree adalah salah satu struktur data yang mendukung pencarian lebih cepat, penyortiran cepat, dan penyisipan dan penghapusan yang mudah.
    Binary Search Tree juga sering disebut dengan Sorted Binary Tree yang berfungsi untuk menyimpan informasi nama atau bilangan yang disimpan di dalam memory.


Aturan main Binary Search Tree adalah :
- Setiap child node sebelah kiri harus lebih kecil nilainya daripada root nodenya
- Setiap child node sebelah kanan harus lebih besar nilainya daripada root nodenya.

berikut  gambaran contoh dari Binary Search Tree


Kenapa harus membedakan kiri dan kanan sesuai besaran nilainya? Tujuannya untuk memberikan efisiensi terhadap proses searching. Kalau struktur data tree sudah tersusun rapi sesuai aturan mainnya, proses search akan lebih cepat.


2. Binary Search Tree Operations
Terdapat 3 operasi dalam Binary Search Tree yaitu :
1. Search
Dengan properti bahwa semua nilai lebih kecil dari root node terletak disebelah kiri dan semua nilai yang lebih besar dari root node terletak disebelah kanan membantu untuk pencarian dalam waktu yang cepat (dengan anggapan h adalah ketinggian tree)

Misalkan kita berada pada satu simpul dan nilai yang ingin dicari lebih kecil dari nilai simpul itu. Dalam hal ini, kita akan mencari di subtree kiri.

contoh:



Jadi fungsi kita akan mengambil elemen yang akan dicari (x) dan pohon (T)yaitu : SEARCH(x,T)
dan kita akan melakukan pencarian jika root of the tree tidak NULL, if (T.root!=NULL)

langkah-langkahnya yaitu :
1. pertama kita cek terlebih dahulu apakah data yang akan dicari berada di root atau tidak. jika sudah di root, maka kita akan mengembalikannya
2. jika bukan, maka kita akan mencari di subtree kiri jika nilai yang akan dicari lebih kecil dari pada root. atau kita akan mecrai di subtree sebelah kanan jika nilai yang akan dicari lebih besar dari pada root.

gambaran codingannya :
SEARCH(x, T)
    if(T.root != null)
        if(T.root.data == x)
            return r
        else if(T.root.data > x)
            return SEARCH(x, T.root.left)
        else
            return SEARCH(x, T.root.right)

2. Insertion
contoh insertion
Langkah-langkah untuk insertion sbb :
Pertama-tama kita akan mencari elemen itu dan jika elemen itu tidak ditemukan, maka kita akan memasukkannya. 
Lalu kita akan menggunakan pointer sementara dan pergi ke tempat node akan dimasukkan.
Kita perlu membuat simpul terakhir dalam iterasi diatas sebagai induk dari simpul baru. jadi kita perlu menggunakan variabel baru
kita telah menggunakan variabel y. ketika tree tidak memiliki simpul, simpul baru akan manjadi root dari tree dan parentnya akan NULL. jadi awalnya nilai y adalah NULL. Jika tidak y akan menunjuk pada simpul terakhir.

setelah ini kita akan menjadikan y sebagai induk dari simpul baru
Terakhir, kita perlu membuat simpul baru anak y. jika y adalah NULL, simpul baru akan menjadi akar dari pohon, jika tidak kita akan memeriksa apakah lebih besar atau lebih kecil dari data y, dan karenanya kita akan membuatnya menjadi kiri atau the right child

gambaran codingannya :
INSERT(T, n)
    temp = T.root
    y = NULL
    while temp != NULL
        y = temp
        if n.data < temp.data
            temp = temp.left
        else
            temp = temp.right
    n.parent = y
    if y==NULL
        T.root = n
    else if n.data < y.data
        y.left = n
    else
        y.right = n

3. Deletion
dalam tahap deletion kita perlu memerhatikan 3 hal yaitu :
1. jika key berada di leaf, maka kita hanya perlu menghapus node tersebut


2. jika key ada di simpul yang memiliki 1 child, hapus simpul tersebut dan sambungkan childnya ke parentnya.



3. jika key ada di simpul yang memiliki 2 child, mkaa temukan child paling kanan dari sub tree kirinya(simpul P), ganti keynya dengan key p dan hapus p secara rekursif



NAMA : Timothy Gilbert
NIM : 2301851036
Kelas Besar : CB01
Kelas Kecil : LK01

sumber :

Tuesday, March 10, 2020

Hashing and Hash Tables, Tree & Binary Tree

Materi Data Structure 10 Maret 2020

Hal yang akan dibahas pada pertemuan kali ini adalah :
1. Hashing
2. Hash Table
3. Hash Function
4. Collision
5. Tree Introduction
6. Tree Concept
7. Binary Tree Concept
8. Type of Binary Tree
9. Property of Binary Tree
10. Expression Tree Concept
11. Threaded Binary Tree Concept

1. Apa itu hashing ?
- Hasing adalah teknik yang digunakan untuk menyimpan dan menggambil kunci dengan cepat.
- Hashing juga disebut sebagai proses memetakan sejumlah besar item data ke tabel yang lebih kecil    dengan bantuan fungsi hasing.
- Hashing digunakan untuk mengindeks dan mengambil item dalam database karena lebih cepat            menemukan item menggunakan kunci hash yang lebih pendek daripada menemukannya                      menggunakan nilai asli.

2.Hash Table
Hash table adalah tabel tempat untuk menyimpan string asli. indeks tabel adalah  hash key, sementara Valueya adalah string asli.

ukuran hash table biasanya besarnya kurang dari jumlah total string yang mungkin, sehingga beberapa string mungkin memiliki hash key yang sama.


3. Hash Function
Ada banyak cara untuk mengaitkan string menjadi kunci. Berikut ini adalah beberapa metode penting untuk membangun fungsi hash :
1.  Mid-square
jika hash key nya adalah string maka diubah menjadi interger terlebih dahulu
langkah-langkah :
   1.Square the value of the key. (k2)
   2. Extract the middle r bits of the result obtained in Step 1
contoh :


2. Division
- Divide the string/identifier by using the modulus operator.
- It's the most simple methd of hashing an integer x
contoh :

jika hash key nya adalah string maka diubah menjadi interger terlebih dahulu dengan menggunakan ASCII



3. Folding
langkah-langkah :
1.Divide the key value into a number of parts
2.Add the individual part (leading is ignored)

contoh :


4. Digit Extraction

Digit yang ditentukan sebelumnya dari nomor yang diberikan dianggap sebagai alamat hash

contoh:
 x = 14,568
If we extract the 1st, 3rd, and 5th digit, we will get a hash code of : 158. 

5. Rotating Hash
langkah-langkah :
1. melakukan hash rotation setelah mendapatkan hash address
2. rotation dilakukan dengan menggeser digit untuk mendapatkan alamat baru

contoh :
Given hash address = 20021
Rotation result: 12002 (fold the digits)

4. Collision
Terdapat 2 cara untuk melakukan Collision yaitu :
1. Linear probing
dengan cara mencari slot kosong berikutnya dan letakan string disana

linear probing merupakan skema dalam pemrograman komputer untuk menyelesaikan collision dalam hash table

contoh :

The collision between John Smith and Sandra Dee (both hashing to cell 873) is resolved by placing Sandra Dee at the next free location, cell 874.

2. Chaining
dengan cara masukkan string ke dalam slot sebagai linked list

dalam chaining, kita menyimpan masing-masing string ke dalam rantai (linked list)
jadi jika terjadi collision kita hanya perlu beralih pada rantai itu

contoh :

5. Tree Introduction
Tree adalah struktur data non-linear yang mewakili hubungan hirarkis di antara objek data

6. Tree Concept


Root − The node at the top of the tree is called root. There is only one root per tree and one path from the root node to any node.
Edge - is a line connecting the parent to the child
Leaf − The node which does not have any child node is called the leaf node
Sibling - The node which is have the same parent
Degree of the node is the total sub tree of the node
Height/Depth - is the maximum degree of nodes in a tree
If there is a line that connects p to q, then p is called the ancestor of q, and q is a descendant of p. 

7. Binary Tree Concept
Binary tree adalah struktur data rooted tree, dimana setiap node memiliki paling banyak dua anak.

karena setiap elemen dalam binary tree hanya dapat memiliki 2 anak, biasanya dinamai dengan anak kiri dan kanan.

contoh binary tree :



8. Type of Binary Tree
Terdapat beberapa tipe binary tree yaitu :

1. Perfect Binary Tree
yaitu binary tree yang dimana semua node interior memiliki dua anak dan semua leaf memiliki kedalaman yang sama atau level yang sama
2. Complete Binary Tree
yaitu binary tree yang dimana setiap level, kecuali mungkin yang terakhir, terisi penuh, dan semua node berada sejauh mungkin
3. Skewed Binary Tree
yaitu binary tree yang dimana setiap node paling banyak memiliki 1 anak
4. Balanced Binary Tree
 A binary tree is height balanced if it satisfies the following constraints:
  1. The left and right subtrees' heights differ by at most one, AND
  2. The left subtree is balanced, AND
  3. The right subtree is balanced
An empty tree is height balanced.

9. Property of Binary Tree
- Maximum number of nodes on level k of a binary tree is 2k
Maximum number of nodes on a binary tree of height h is 2h+1 - 1.
Minimum height of a binary tree of n nodes is 2log(n).
Maximum height of a binary tree of n nodes is n - 1.

10. Expression Tree Concept
Terdapat beberapa expression dalam tree yaitu :
1. Prefix 
2. Postfix
3. Inflix
 yang akan dijelaskan dalam gambare berikut 

11. Threaded Binary Tree Concept
A threaded binary tree is defined as follows:
"A binary tree is threaded by making all right child pointers that would normally be null point to the in-order successor of the node (if it exists), and all left child pointers that would normally be null point to the in-order predecessor of the node"

Berikut adalah perbedaan binary tree dengan threaded binary tree

kelebihan dari threaded binary tree
- Ini memungkinkan lintasan linier elemen di pohon
-Treanversal linear menghilangkan penggunaan tumukan yang pada gilirannya akan menghabiskan banyak ruang memori dan waktu
-ini memungkinkan untuk menemukan induk dari elemen yang diberikan tanpa menggunakan pointer orangtua secara eksplisit

Nama : Timothy Gilbert
NIM : 2301851036
Kelas Besar : CB01
Kelas Kecil : LK01

Tuesday, March 3, 2020

linked list review

Materi Data Structure 3 Maret 2020

Hal yang dibahas pada pertemuan ini yaitu meriview tentang :
1. insert pada single linked list
2. insert pada double linked list
3. queue
4. stack

1. Insert pada single linked list
sama seperti materi sebelumnya untuk menginsert / push data dalam sebuah linked list kita memerlukan pemesanan memory dengan menggunakan  perintah malloc.

 Dalam menginsert suatu data kita bisa menggunakan push depan ataupun push belakang.

berikut cara untuk mengisnert/push data ke dalam suatu single linked list :
1. push depan


2. push belakang


2. Insert pada double linked list
sama seperti pada single linked list, untuk insert pada double linked list kita juga harus memesam memory terlebih dahulu, dengan menggunkana fungsi malloc

untuk menginsert data pada double linked list dapat dengan melakukan push depan dan push belakang.

berikut cara melakukan push depan dan push belakang pada double linked list :

1. push depan

2. push belakang

3. Queue

Baik pada single linked list dan double linked list dapat dilakukan queue.
Queue merupakan istilah lain delete akan tetapi delete yang dilakukan mulai dari HEAD.

1. queue pada single linked list
berikut adalah cara untuk melakukan queue/popDepan pada single linked list

2. queue pada double linked list
berikut adalah cara untuk melakukan queue/popDepan pada double linked list

4. Stack

Baik dalam single linked list maupun double linked list dapat dilakukan stack.
Stack merupakan istilah lain dari delete akan tetapi delete yang dilakukan mulai dari TAIL.

1. Stack pada single linked list
berikut adalah cara melakukan stack pada single linked list

2. stack pada double linked list
berikut adalah cara melakukan stack pada double linked list.



NAMA : Timothy Gilbert
NIM : 2301851036
Kelas Besar : CB01
Kelas Kecil : LK01