rangkuman DS semester 2


                                                       Final Review
NIM : 2301862802
Nama : Jefry
Kelas : CB01
Lecturer : Ferdinand Ariandy Luwinda (D4522) dan Henry Chong (D4460)

Pengertian AVL Tree dalam Struktur Data


AVL Tree adalah Binary Search Tree yang memiliki perbedaan tinggi/ level maksimal 1 antara subtree kiri dan subtree kanan. AVL Tree muncul untuk menyeimbangkan Binary Search Tree. Dengan AVL Tree, waktu pencarian dan bentuk tree dapat dipersingkat dan disederhanakan.


Gambar AVL Tree


Penambahan node di AVL Tree


        Untuk menjaga tree tetap imbang, setelah penyisipan sebuah node, dilakukan pemeriksaan dari node baru → root. Node pertama yang memiliki |balance factor| > 1 diseimbangkan. Proses penyeimbangan dilakukan dengan: Single rotation dan Double rotation


Single Rotation

Single rotation dilakukan bila kondisi AVL tree waktu akan ditambahkan node baru dan posisi node baru seperti pada gambar 2. T1, T2, dan T3 adalah subtree yang urutannya harus seperti demikian serta height- nya harus sama (≥ 0). Hal ini juga berlaku untuk AVL tree yang merupakan citra cermin (mirror image) gambar 2.



Gambar 2

Double Rotation

Double rotation dilakukan bila kondisi AVL tree waktu akan ditambahkan node baru dan posisi node baru seperti pada gambar 3. T1, T2, T3, dan T4 adalah subtree yang urutannya harus seperti demikian. Tinggi subtree T1 harus sama dengan T4 (≥ 0), tinggi subtree T2 harus sama dengan T3 (≥ 0). Node yang ditambahkan akan menjadi child dari subtree T2 atau T3. Hal ini juga berlaku untuk AVL tree yang merupakan citra cermin (mirror image) gambar 3.



Gambar 3


Menghapus node di AVL Tree
Proses menghapus sebuah node di AVL tree hampir sama dengan BST. Penghapusan sebuah node dapat menyebabkan tree tidak imbang Setelah menghapus sebuah node, lakukan pengecekan dari node yang dihapus → root. Gunakan single atau double rotation untuk menyeimbangkan node yang tidak imbang. Pencarian node yang imbalance diteruskan sampai root.


B-Trees (Balanced Tree Data)
B-tree adalah suatu metode untuk menyimpan dan menemukan suatu file (disebut juga records atau keys) dalam suatu database. Algoritma b-tree meminimalkan jumlah dari media yang harus dilalui untuk mencapai suatu record database yang diinginkan sehingga akan mempercepat proses.


        Gambar 3. Struktur dari sebuah tree 

B-tree lebih dianjurkan ketika pengaksesan ke nodes adalah menggunakan media harddisk bukan RAM (Random Access Memory). Dibutuhkan waktu seribu kali lebih lambat untuk mengakses elemen data dari harddisk dibanding RAM, karena struktur harddisk yang memiliki bagian-bagian mekanik yang bergerak. Metode b-tree sangat menghemat waktu dimana setiap nodes bisa mempunyai beberapa cabang (disebut dengan children) jika dibanding dengan binary-tree yang hanya mempunyai dua children. Ketika terdapat beberapa children dalam suatu nodes, maka suatu record dapat ditemukan dengan hanya melewati beberapa nodes saja dibandingkan dengan node yang hanya mempunyai dua children.

Gambar 4. Struktur dari sebuah b-tree
          
Dalam sebuah tree (pohon), record disimpan dalam suatu lokasi yang disebut leaves (cabang). Suatu record dalam b-tree selalu berada pada titik akhir. Jumlah maksimal dari children setiap node disebut order. Jumlah dari disk access yang dibutuhkan disebut depth. Pada gambar diatas (kanan) menunjukkan sebuah b-tree dengan 3 buah order untuk menuju suatu record yang ada dalam 8 leaves. Pada gambar kiri adalah binary-tree dengan depth 4 dan b-tree dengan depth 3. Jelas terlihat bahwa metode b-tree memungkinkan pengaksesan record lebih cepat dengan asumsi semua sistem parameter adalah sama.

Dalam prakteknya b-tree bisa memiliki ribuan atau jutaan record. Tidak harus semua leaves memiliki suatu record, namun paling tidak adalah separuhnya harus memiliki. Perbedaan depth antara skema b-tree dan binary-tree adalah dalam penggunaan di sebuah sistem database dimana b-tree bisa memiliki order yang lebih tinggi, misalnya 32,64,128 atau lebih. Penambahan sejumlah record dalam database akan menambah depth, begitu juga sebaliknya. Struktur tree mendukung berbagai operasi dasar termasuk search, predecessor, successor, minimu, maximum, insert dan delete dalam sebuah tree.

Red Black Tree

I.Syarat Red Black Tree

Red Black Tree dapat disebut sebagai BST (Binary Search Tree) kalau memenuhi syarat berikut :
1. Setiap node mempunyai warna antara hitam atau merah.
2. Root nya selalu berwarna hitam (default).
3. Semua external node berwarna hitam.
4. Kalau sebuah node (parent) merah, maka node (children) nya berganti menjadi hitam.

Jadi dapat disimpulkan bahwa :
1. Tidak ada node (children) berwarna merah yang mempunyai node (parent) berwarna merah.

II.Push

Cara push RBT sama dengan BST, tetapi yang membedakan adalah bahwa node baru (root) adalah merah.

Lalu, disini diadakan pengecekan dimana kondisi nya adalah :
1. Kalau parent nya hitam, maka tidak ada kesalahan.
2. Kalau parent nya merah, maka terjadi kesalahan, karena balik ke kesimpulan pertama bahwa tidak ada node (children) berwarna merah yang mempunyai node (parent) berwarna merah.

Cara membenarkan jika terjadi kesalahan : 
1. Pertama kita anggap node baru adalah q, lalu parent nya adalah p dan sibling dari parent adalah s.Kalau parent tidak mempunyai sibling maka s berwarna hitam.
2. Kalau s merah, maka ganti p dan s menjadi hitam dan orang tua dari p menjadi merah.
3. Kalau s adalah hitam, maka lakukan rotasi (single atau double), ganti titik pivot terakhir menjadi hitam, dan child nya menjadi merah.

Berikut adalah kasus - kasus dalam push RBT :

1.











Disini dapat dilihat bahwa node baru nya adalah X dan parent dari X berwarna hitam, jadi tidak ada kesalahan.



2. 

Disini kita dapat lihat bahwa node yang baru di masukan adalah X (gambar kiri) atau Z (gambar kanan), terus parent nya berwarna merah, maka disinilah kesalahan itu terjadi.Nah cara membetulkan nya adalah dengan mengubah uncle dan parent dari X (gambar kiri) atau Z (gambar kanan) ke hitam, lalu ganti grandparent nya ke warna merah.


3.
Pada gambar ini kita dapat melihat node baru yang akan dimasukkan adalah X (Z pada gambar kanan).
Lalu kita cek bahwa parent nya adalah merah, jadi terjadi kesalahan.Lalu disini kita melihat bahwa parent dan grandparent dari X serta Z berada dalam 1 jalur (left-left atau right-right), maka untuk membetulkan nya adalah dengan melakukan single rotate.

Cara untuk melakukan single rotate adalah dengan melihat alur nya, jika alur nya left-left maka kita akan melakukan rotate ke arah kanan dan sebalik nya, dimana titik pivot nya berada di grandparent dan ubah warna parent menjadi hitam dan anak - anak nya menjadi merah.


4.
Pada kasus ini, kita dapat melihat bahwa node yang baru dimasukan adalah Y.Lalu parent nya berwarna merah, maka disini terjadi lah kesalahan.Kemudian disini terlihat bahwa jalan dari Y ke parent berbeda dengan jalan dari Y ke grand parent, oleh karena itu kita akan melakukan double rotate untuk membenarkan nya.

Cara untuk melakukan double rotate adalah dengan mengambil pivot pertama pada X lalu pindahkan Y sehingga menjadi child dari Z dan X menjadi child dari Y, lalu lakukan single rotate (left-left atau right-right).
Setelah selesai, maka ganti posisi pivot yang terakhir menjadi hitam dan anak - anak nya menjadi merah.



III.Delete

Setelah belajar cara untuk push, maka kita akan belajar cara untuk menghapus nya, cara nya hampir mirip dengan di BST.

Misal nya seperti ini :
1. Misalkan node yang mau di hapus adalah M lalu anak nya adalah C.
2. Kalau M adalah merah, lalu maka tinggal mengganti M dengan C yang berarti warna C seharus nya adalah hitam.
3. Kalau M adalah hitam dan C adalah merah, ganti M dengan C dan ubah warna C menjadi hitam.

Lalu bagaimana kalau M dan C adalah hitam ?

Maka, langkah yang akan kita lakukan adalah :
1. Ganti M dengan C, lalu kita ganti nama C menjadi N (ini disebut double black), dan parent nya menjadi P, sibling nya menjadi S, lalu SL adalah anak kiri dan SR adalah anak kanan.
2. Kalau S berwarna merah tukar warna N dan P, lalu putar di P
3. Kalau S, SL dan SR berwarna hitam maka ganti warna S ke merah
4. Kalau S adalah hitam dan SL atau SR adalah merah, maka lakukan single atau double rotate.


Berikut adalah kasus - kasus dalam delete RBT :
1. 
Dalam kasus ini dapat kita lihat bahwa a adalah double black node, sibling nya berwarna merah jadi kita putar di X dan ganti warna X dan Y.


2.
Dalam kasus ini a adalah double black node, sibling nya adalah black dan anak dari sibling tersebut adalah node berwarna hitam, jadi ganti warna sibling menjadi merah.


3.
Dalam kasus ini a adalah double black node, sibling nya berwarna hitam dan anak dari sibling tersebut berwarna merah, jadi lakukan single atau double rotation.

Head dan Tries

Heap

Heap adalah suatu Binary Tree lengkap yang menggunakan persyaratan Heap. Di dalam heap terdapat dua tipe heap yaitu Min Heap dan Max Heap. Min Heap adalah sebuah Binary Tree dimana root dari tree tersebut adalah angka terkecil atau memiliki nilai terkecil dibandingkan seluruh node didalam tree tersebut sedangkan Max Heap adalah sebaliknya yaitu Binary Tree dimana root dari tree tersebut adalah angka terbesar dari tree tersebut.

Berikut adalah contoh dari Min Heap dan Max Heap:

Min Heap

Aturan dalam membuat Min Heap:
1. Value dari suatu parent harus lebih kecil dari value anaknya
2. Root dari tree adalah value terkecil yang ada didalam tree
3. Value terbesar terdapat di salah satu node leaf
 

Max Heap

Aturan dalam membuat Max Heap:
1. Value dari suatu parent harus lebih besar dari value anaknya
2. Root dari tree adalah value terbesar yang ada didalam tree
3. Value terkecil terdapat di salah satu node leaf


Min-Max Heap

Min-Max Heap adalah gabungan dari Min Heap dan Max Heap. Karena Min-Max Heap adalah gabungan dari Min dan Max Heap maka aturan dari kedua heap  tersebut disatukan menjadi seperti berikut:

1. Root menggunakan aturan Min Heap.
2. Setiap node yang memiliki height ganjil mengikuti aturan Min Heap.
3. Setiap node yang memiliki height genap mengkuti atuan Max Heap.





Tries

Tries adalah Binary Tree dimana isi dari tersebut adalah kumpulan dari kata-kata. Tree ini dibuat untuk mempermudah pencarian suatu kata-kata (biasanya digunakan pada saat pembuatan fitur search pada kamus).


Comments