2-3 Tree, 2-3-4 Tree dan B-Tree Oleh : Chandra Liestiawan, S.Kom (D2629) 2-3 Tree, 2-3-4 Tree dan B-Tree PENDAHULUAN 2-3 Tree, 2-3-4 Tree dan B-Tree, merupakan jenis tree yang ‘berani tampil beda’ dibanding jenis tree yang lain (seperti binary tree, BST, AVL-Tree, dsb) Apanya yang beda? Yang paling jelas adalah hubungan antara elemen dengan node. Perhatikan: Pada tree biasa (BT, BST, AVL-T), pengertian node dan elemen bisa dianggap sama, karena tiap node pasti hanya terdiri dari 1 elemen saja. elemen Sebenarnya, node dapat diandaikan sebaI gai tempatnya, sedangkan elemen dianggap sebagai isi / datanya. gbr. 1. Contoh Tree ‘Penampilan Biasa’ node A H Pada 2-3 tree, 2-3-4 tree, dan Btree, tiap node bisa terdiri dari beberapa elemen. gbr. 2. Contoh Tree ‘Berani Tampil Beda’ Lalu, node dibedakan berdasarkan jumlah elemen yang sedang ditampungnya, yaitu : Contoh Jenis Node Jumlah Elemen Jumlah Child A A B A B C 2-node 1 2 3-node 2 3 4-node 3 4 Perhatikan, bahwa jumlah child PASTI = jumlah elemen + 1 1 2-3 Tree, 2-3-4 Tree dan B-Tree Oleh : Chandra Liestiawan, S.Kom (D2629) 2-3 TREE Ciri - ciri : 1. Tiap nodenya maksimun terisi 2 elemen (Ingat! Jumlah child tiap node PASTI = jumlah elemennya + 1. Harus ! Nggak kurang, nggak lebih. Kecuali kalo node tsb berupa leaf). 2. Tiap Leaf terletak pada level yang sama. 3. Terurut (mirip BST). Jadi jenis node yang mungkin ada adalah : 2-node dan 3-node (jangan salah mengerti ya. 2-node BUKAN maksudnya ada 2 node loh !! Lihat lagi tabel node di bagian pendahuluan di atas). Dalam syntax C++ nya, node 2-3 tree didefinisikan sbb: Struct node_2_3 Keterangan : { int ele_L, ele_R; ele_L itu singkatan dari elemen Left. struct node_2_3 *LC,*MC,*RC; MC itu singkatan dari Middle Child. } Misal tipe elemennya integer. Bagi yang mau pelajari codingnya, baru baca hal berikut : Untuk bagian node yang sedang tidak terisi elemen, diisi dengan INT_MAX. Operasi Insert pada 2-3 Tree Langkah-langkahnya : 1. Cek dulu elemen tersebut sudah ada belum. Kalo sudah ada maka gagal, kalo belum ada maka lanjut ke langkah berikutnya. 2. Cari posisi leaf yang sesuai (insert pasti di leaf dulu). 3. IF leaf tsb berupa 2-node maka langsung input. ELSE (berarti leaf tsb berupa 3-node, berarti sudah penuh) maka lakukan Split. Operasi Split pada 2-3 Tree Split ialah memecah suatu node menjadi 2. Split terjadi saat suatu node penuh (jadi node tersebut berupa 3-node). Ada 2 tempat terjadinya split, yaitu : Root dan bukan Root. 1. Split di Root Elemen tengah naik menjadi Root baru, sehingga level tree bertambah 1. Contoh : Insert(40) pada tree berikut : Perhatikan, letakkan elemen dari sebelah kiri. 2 2-3 Tree, 2-3-4 Tree dan B-Tree Oleh : Chandra Liestiawan, S.Kom (D2629) 2. Split bukan di Root Elemen tengah naik bergabung dengan parentnya. Contoh : Insert(5) pada tree berikut : Perhatikan, letakkan elemen dari sebelah kiri. Operasi Delete pada 2-3 Tree Delete pada Leaf : 1. Cek apakah leaf tempat elemen tersebut berada, berupa 2-node atau 3-node. 2. Jika berupa 3-node, maka : langsung aja delete. Jangan lupa, letakkan elemen di sebelah kiri. (Bagi yang sudah mengerti dan kemudian mau coba pelajari codingnya, baru baca hal berikut : set bagian yang kosong pada node dengan nilai INT_MAX). 3. Jika berupa 2-node, maka: a. Cek sibling terdekat (kiri dulu baru kanan). b. Jika sibling tersebut berupa 3-node, maka : Rotasi. c. Jika sibling tersebut berupa 2-node (atau nggak punya sibling), maka : Merge / Combine. Contoh : Misal, terdapat suatu 2-3 tree seperti pada gambar di samping. Lalu ada perintah : 1. Delete (60). Fail, tidak ada perubahan apapun pada tree. 2. Delete (20). karena elemen 20 terletak pada 3-node maka delete langsung. Jangan lupa elemen letakkan di kiri, makanya si 25 digeser. 3 2-3 Tree, 2-3-4 Tree dan B-Tree Oleh : Chandra Liestiawan, S.Kom (D2629) 3. Delete (25). Cek silbling kiri. Karena sibling kiri berupa 3-node, maka rotasi. 4. Delete (10). Cek sibling kiri, eh ternyata berbentuk 2-node. Maka cek sibling kanan. Karena sibling tsb berupa 3-node, maka rotasi. 5. Delete (30). Karena dari sibling kiri-kanannya nggak bisa diharapkan, maka merge / combine. Pada saat combine, elemen yang menjadi parent akan turun posisi. Pada contoh di samping, bukan elemen 40 yang turun, karena elemen 7, karena elemen 7 lah parent yang sesuai dengan child yang akan combine. 4 2-3 Tree, 2-3-4 Tree dan B-Tree Oleh : Chandra Liestiawan, S.Kom (D2629) Delete bukan pada Leaf : 1. Cari pengganti elemen tersebut dari elemen terbesar di sub-tree kiri atau elemen terkecil dari sub-tree kanan (Masih ingat dengan delete pada BST? Nah, kira-kira kaya begitulah caranya). 2. Sewaktu elemen terkecil atau terbesar tersebut diambil, anggap aja elemen tersebut (biasanya terletak di leaf) di delete pada leaf. Contoh : Jika pada tree di samping, dilakukan delete(30), maka elemen 30 dihapus dan digantikan oleh elemen 25 (karena kiri yang terbesar). Lalu karena elemen 25 meninggalkan posisi leafnya, maka lanjutkan seperti pada delete leaf. Alternatif lain: elemen 40 yang menggantikan elemen 30. Oke, kalo sudah baca sampe sini, sebaiknya istirahat dulu. Coba-coba deh buat latihan insert dan delete 2-3 tree. Kalo perlu rancang dan bikin sendiri aja soalnya, biar seru . Setelah udah jelas, baru lanjut ke 2-3-4 tree. 2-3-4 TREE Ciri - ciri : 1. Tiap nodenya maksimun terisi 3 elemen (Ingat! Jumlah child tiap node PASTI = jumlah elemennya + 1. Harus ! Nggak kurang, nggak lebih. Kecuali kalo node tsb berupa leaf). 2. Tiap Leaf terletak pada level yang sama. 3. Terurut (mirip BST). Jadi jenis node yang mungkin ada adalah : 2-node, 3-node dan 4-node (jangan salah mengerti ya. 2-node BUKAN maksudnya ada 2 node loh !! Lihat lagi tabel node di bagian pendahu-luan di atas). (Mirip ya dengan ciri-ciri 2-3 Tree ? Betul ! Hasil copy paste nih, hehehe ). 5 2-3 Tree, 2-3-4 Tree dan B-Tree Oleh : Chandra Liestiawan, S.Kom (D2629) Dalam syntax C++ nya, node 2-3 tree didefinisikan sbb: Struct node_2_3_4 Keterangan : { int ele_L, ele_M, ele_R; ele_M itu singkatan dari elemen Middle. struct node_2_3_4 *LC, *MLC, MLC itu singkatan dari Middle LeftChild. *MRC, *RC; Misal tipe elemennya integer. } Bagi yang mau pelajari codingnya, baru baca hal berikut : Untuk bagian node yang sedang tidak terisi elemen, diisi dengan INT_MAX. Operasi Insert pada 2-3-4 Tree Langkah-langkahnya : 1. Cek dulu elemen tersebut sudah ada belum. Kalo sudah ada maka gagal, kalo belum ada maka lanjut ke langkah berikutnya. 2. Telusuri tree untuk mencari posisi leaf yang sesuai, sambil mengecek jenis tiap node yang dilalui. Jika node tsb berupa 4-node (sudah pas penuh), maka lakukan split. 3. Jadi pada sampai di posisi leaf yang sesuai, sudah tidak perlu lagi melakukan split. Perhatikan : Split pada 2-3-4 tree dilakukan saat pointer bergerak turun mencari posisi leaf. Hal ini dikenal dengan istilah Top-Down Split, sedangkan split pada 2-3 tree dilakukan saat pointer bergerak naik dari leaf. Hal ini dikenal dengan istilah Bottom-Up Split. Pada saat split di 2-3-4 tree, elemen tengah yang akan dijadikan parent ditentukan sebelum elemen baru diinsert. sedangkan split di 2-3 tree, elemen tengahnya ditentukan setelah elemen baru diinsert. Contoh : Jika suatu 2-3-4 tree sedang berbentuk seperti gambar di samping, kemudian diberikan perintah insert(6). Coba, jadi seperti apa hasilnya? Tips : Mau lebih seru dan lebih mengerti? Sebaiknya kamu jangan langsung lihat jawaban yang sudah saya tuliskan dilembar berikutnya, tapi kamu coba dulu aja sendiri (jangan takut salah, toh gak ada orang lain yang tahu ini). Baru nanti bandingkan jawabanmu dengan jawaban dari saya, saya sertakan penjelasnya kok. Tapi kalo memang masih belum jelas, silahkan tanya langsung aja ke saya . Kerjakan sekarang, lalu silahkan buka halaman berikutnya untuk cek jawaban kamu ! 6 2-3 Tree, 2-3-4 Tree dan B-Tree Oleh : Chandra Liestiawan, S.Kom (D2629) Bagaimana? Apakah jawaban kamu seperti gambar di samping? Sayangnya, jawaban di samping ini adalah contoh jawaban yang SALAH !! Jawaban yang benar adalah seperti gambar di bawah ini. Langkah-langkah prosesnya saya sertakan semoga jadi lebih mudah dipahami. Pengecekan dimulai dari root. Ternyata dideteksi bahwa node tsb (si root) merupakan 4-node (sudah terisi 3 elemen), jadi langsung aja node tsb di-split ! Elemen 40 akan naik, membentuk node baru (kalau bingung, lihat kembali cara split 2-3 tree). Pengecekan dilanjutkan ke node berikutnya sesuai urutan besar / kecilnya. Karena elemen 6 (yang akan diinput) lebih kecil dari 10, maka lanjut ke node kirinya. Kemudian sampai di node yang berisi elemen 2, dan node tersebut berupa leaf, maka perjalanan kita sudah sampai. Insert 6 ke node tersebut. Sudah. Selesai Jangan lupa ya harus terurut. 7 2-3 Tree, 2-3-4 Tree dan B-Tree Oleh : Chandra Liestiawan, S.Kom (D2629) Operasi Delete pada 2-3-4 Tree Seperti halnya pada 2-3 tree, proses delete pada 2-3-4 tree dapat difokuskan pada delete elemen di leaf. Jika ternyata elemen yang akan didelete tidak terletak di leaf, maka gantikan dulu posisinya dengan elemen leaf. Delete pada Leaf Pedoman yang perlu diingat pada proses ini adalah harus bisa dijamin bahwa child yang akan dikunjungi bukan berupa 2-node. Untuk itu diperlukan restrukturisasi yang dilakukan ketika child yang akan dikunjungi tsb berupa 2-node. Jadi langkah-langkahnya adalah sbb: 1. Dimulai dari root. 2. Cek apakah child yang akan dikunjungi berupa 2-node. 3. Jika iya berupa 2-node, maka : a. Cek sibling terdekat. b. Jika sibling tsb berupa 2-node, maka lakukan merge / combine. c. Jika sibling tsb bukan berupa 3-node, maka lakukan rotasi. 4. Ulangi langkah 2 sampai ke leaf. Contoh : Untuk kemudahan penjelasan maka tiap node pada 2-3-4 tree di atas tsb saya berikan nama, yaitu: a, b, c, d, e, f, g, h, i, j, k. Jika pada 2-3-4 tree di atas dilakukan delete(38), maka setelah memastikan bahwa elemen 38 ada di leaf, lakukan pengecekan mulai dari root. Posisi pengecekan ini saya lambangkan dengan posisi curr. Langkahnya sbb: Saat curr berada di a, kita tahu bahwa nilai 38 terletak di antara 20 dan 40, maka nantinya kita akan melangkah ke c. Sebelum melangkah, cek c tsb dulu. Karena c berupa 2-node dan mempunyai sibling terdekat (yaitu si d) yang bukan 2node maka lakukan rotasi antara c dengan d. 8 2-3 Tree, 2-3-4 Tree dan B-Tree Oleh : Chandra Liestiawan, S.Kom (D2629) Ingat cara rotasi! Elemen 44 akan turun, digantikan elemen 59. Perhatikan bahwa ada beberapa pointer yang mungkin akan ikut bergeser. Jangan lupa untuk menempatkan elemen di sebelah kiri. Sekarang curr berada di c. Lihat! Nilai 38 terletak di antara 35 dan 44, maka nantinya kita akan melangkah ke h. Sebelum melangkah, cek h tsb dulu. Karena h berupa 2-node dan sibling terdekatnya semua berupa 2-node maka lakukan combine antara g dengan h. (Ingat! Kalo mau combine, usahakan dengan sibling kiri dulu, kalo nggak mungkin, baru ke sibling kanan). Seperti biasa, untuk combine maka parent yang sesuai (dalam contoh ini elemen 35) 9 2-3 Tree, 2-3-4 Tree dan B-Tree Oleh : Chandra Liestiawan, S.Kom (D2629) harus turun dulu. Misalkan node hasil combine tsb saya sebut ‘m’. Sekarang curr berada di m. Karena sudah leaf, maka 38 dihapus aja langsung. Selesai deh . Perhatikan lagi deh, saat curr sampai di leaf, maka leaf tersebut tidak mungkin berupa 2node, karena sudah kita cegah duluan, sehingga tidak perlu lagi dilakukan restrukturisasi bottom-up. Gimana? Nggak sulit kan. Ketelitian juga penting loh. Baik 2-3 tree maupun 2-3-4 tree bisa menarik banget. Coba deh bikin daftar inputan sendiri, kalo kamu sudah lancer, mau seaneh apapun daftar inputan tersebut, tetap aja bisa digambarkan hasilnya. Seru oiii.. B-TREE B-Tree mirip banget sama 2-3 tree. Baca sendiri aja deh. Tips : sebenarnya 2-3 tree adalah B-Tree dengan orde = 1. Coba kamu cari lebih lagi tentang B-tree deh. --- SELAMAT BELAJAR --- 10
© Copyright 2024 Paperzz