Kamis, 22 Mei 2014

Red Black Tree

Red-Balck Tree (RBT) adalah sebuah BST (binary search tree) dimana tiap simpul memiliki atribut warna yang bernilai merah atau hitam.
            RBT juga berguna dalam pemrograman fungsional karena RBT merupakan salah satu struktur data yang paling “persistent”, digunakan untuk membuat associative array dan himpunan yang bhisa mengambil kembali versi sebelumnya setelah perubahan. Versi “persistent” dari RBT memerlukan tambahan ruang O(log n) untuk setiap insersi atau delesi, selain waktu.
RBT isometri dari pohon 2-3-4. Artinya, untuk setiap 2-3-4 pohon, terdapat paling sedikit satu satu RBT dengan elemen data yang berurutan sama. Operasi insersi dan delesi pada pohon 2-3-4 equivalen dengan color-flipping (pertukaran warna) dan rotasi pada RBT. Ini membuat pohon 2-3-4 alat yang penting untuk memahami logika dibalik RBT, hal ini pula yang membuat berbagai text algoritma memperkenalkan pohon 2-3-4 sebelum RBT walaupun pohon 2-3-4 lebih jarang digunakan.
Red Black Tree adalah suatu BST( Binary Search Tree) dimana node-node dan edge-edge memiliki warna merah atau hitam. Warna dari root selalu hitam. Warna dari edge yang menghubungkan ayah dengan anaknya selalu berwarna sama dengan warna node anak tersebut. Selain atribut yang dimiliki oleh BST, kita memerlukan persyaratan berikut untuk memnentukan
validitas RBT :

Aturan pada Red Black Tree :
1.      Setiap simpul/node adalah berwarna merah atau hitam
2.      Akar selalu berwarna hitam
3.      Nilai sebuah node adalah lebih besar anak kirinya dan lebih kecil dari anak kanannya.
4.      Jika node berwarna merah, anaknya harus berwarna hitam
5.      Node berwarna merah secara berturut-turut tidak diperkenankan.
6.      Setiap path dari node yang menuju ke nil harus mengandung nilai yang sama dengan node yang berwarna hitam.
7.      Tree dikatakan setimbang jika selisih level dari anak kiri dan anak kanan maksimal dua.
8.      Node dibawah root yang berada pada level yang sama disebut sibling.

Aturan Insert pada Red Black Tree :
1.      Setiap node baru yang disisipkan  kedalam tree akan diberi warna merah.
2.      Jika kita memberi warna hitam  pada node baru yang  masuk, maka jumlah node dari root akan berbeda.
3.      Jika kita memasukkan node baru yang berwarna merah kedalam parent yang berwarna hitam tidak akan menjadi masalah, yang menjadi masalah adalah jika kita menyisipkan node baru ke dalam parent yang berwarna merah
4.      Jika parent berwarna merah kita akan membuat dua node merah yang berurutan, jadi kita harus melakukan rotasi atau pewarnaan ulang.

5.      Hal penting yang harus diingat adalah node yang tidak mempunyai daun harus berwarna hitam.



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 rotat

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.


Nama: Ardi Yuriansyah
Nim: 1701290816

www.binus.ac.id













Tidak ada komentar:

Posting Komentar

Popular Posts