download

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