Anda di halaman 1dari 18

LECTURE NOTES

COMP6601 – Data Structures

Week 8
2-3 Tree

COMP6601 – Data Structures


LEARNING OUTCOMES

1. Analyze the usage of data structure in application

2. Design a proper data structure needed in application

OUTLINE MATERI (Sub-Topic):

1. 2-3 Tree Concept


2. Operation: Search, Insertion, Deletion

COMP6601 – Data Structures


ISI MATERI

1. Definition of 2-3 Tree


2-3 Tree adalah sebuah tree dalam data structure yang setiap nodenya memiliki 2
child dengan masing-masing 1 data atau 3 child dengan masing-masing 2 data. 2-3
Tree bukan merupakan Binary Tree.
Sebuah 2-3 Tree dengan height h:
• Adalah sebuah empty tree, jika h = 0
• Jika h > 0, maka tree tersebut merupakan salah satu dari dua bentuk ini:

Data disimpan di dalam leaf tree dan disimpan secara berurutan, jika dilihat dari kiri
ke kanan. Internal nodes dari tree tersebut terlihat seperti index di dalam buku.
Internal node mungkin berisi key index untuk memandu pencarian ke dalam leaf yang
menyimpan data yang diinginkan.

Sebuah node v dengan dua anak TL dan TR:

Node v berisi 1 key index k1, yang berarti data dan key index dalam TL lebih kecil
daripada k1, sedangkan data dan key index dalam TR lebih besar atau sama dengan k1.

COMP6601 – Data Structures


Sebuah node v dengan tiga anak TL, TM dan TR:

Node v berisi dua nilai k1 dan k2 dimana k1 < k2, maka


• Data dan key index dari TL lebih kecil dari k1
• Data dan key index dari TR lebih besar atau sama dengan k2, dan
• Data dan key index dari TM lebih besar atau sama dengan k1 dan lebih kecil dari
k2.
Contoh:

2. Operation in 2-3 Tree


2.1. Searching
Operasi searchind dalam 2-3 tree sangat mirip dengan searching dalam binary tree,
kecuali :
• Bisa saja diharuskan untuk mengecek 2 key index dalam sebuah node untuk
menentukan child mana yang akan dikunjungi
• Selalu mencari ke arah leaf (interior node tidak menyimpan data, sehingga kita
mencari ke dalam leaf

COMP6601 – Data Structures


• Pada 2-3 tree dibandingkan dengan menggunakan binary search tree property
untuk menentukan child mana yang akan dipindahkan, digunakan rules baru untuk
menempatkan key index dalam interior node untuk menentukannya.

2.2. Insertion
Ketika ingin memasukkan key baru “k”, leaf baru yang menyimpan k akan
dimasukkan ke dalam tree. Hal pertama yang dilakukan adalah mencari key “k” dan
mengingat interior node terakhir yang ditemukan ketika proses searching terjadi (1
level di atas leaf). Interior node tersebut akan menjadi parent dari new leaf.
Inserting 18 yang menyebabkan proses searching:

COMP6601 – Data Structures


Setelah sampai pada level leaf, maka node yang ditemukan sebelumnya (parent 20)
adalah parent untuk node baru ini. Case ini adalah simple case: menentukan parent
yang mempunyai 2 anak, sehingga masih ada ruang untuk 1 lagi. Leaf akan tetap tidak
berubah, dan 18 akan menjadi middle child dari parent.

Ketika parent mempunya 3 child, parent harus mempunya 2 key index k1 dan k2, di
mana k1 < k2. Nilai dari middle dan right child akan menjadi k1 dan k2.

Contoh:
Insert 28. Langkah pertama, cari sampai leaf:

COMP6601 – Data Structures


Berakhir di leaf 27, sehingga parent (27, 29) akan menjadi parent dari leaf baru
tersebut.

Parent dari leaf baru sudah memiliki 3 child:

Untuk menyelesaikan permasalahan dari parent dengan 3 child dan terlalu penuh
untuk menerima child lain:
• Bagi ke 4 child menjadi 2 child dengan nilai yang lebih kecil dan 2 child yang
dengan nilai lebih besar
• 2 child dengan nilai yang lebih kecil tetap bersama parent, yang akan menjadi satu
node dengan 2 child.
• Buat node baru untuk menjadi parent dari 2 child dengan nilai yang lebih besar

Split the four children into two pairs:

COMP6601 – Data Structures


Parent yang lama hanya akan memiliki 1 key index, dan parent yang baru
memerlukan sebuah index key dan harus disambungkan dengan parentnya. Pada level
di atas leaf, dapat dengan mudah memperbaiki key index dengan mengambil data dari
leaf. Ketiga nilai (27, 28 dan 29) dalam 4 child akan menjadi key index dalam
parentnya dan parent dari parentnya tersebut (grandparent).
Parent yang sebelumnya harus memiliki key index 27 dan parent yang baru akan
memiliki key index 29 yang diambil dari nilai child yang terbesar.
Pada saat ini middle value (28) dari ketiga value akan menjadi key index dalam
grandparent yang akan membagi parent lama dengan parent baru.

Set up index keys correctly:

Karena grandparent sangat penuh, maka diharuskan untuk membagi grandparent


dengan cara yang sama:

Apakah key index yang seharusnya berada dalam grandparent lama dan grandparent
baru? Karena grandparent lama adalah sebuah root, maka tidak ada parent yang
digunakan untuk menggabungkan keduanya. Bagaimana caranya untuk
menggabungkan grandparent baru ke dalam tree?

Ketika membagi sebuah interior node yang bukan merupakan parent dari leaf, node
tersebut akan memiliki 3 key index (node yang didapatkan dari pembagian sebuah
child) yang membagi 4 anak.

COMP6601 – Data Structures


• The minimum of those three index keys becomes the old parent's index key.
• The maximum of those three index keys becomes the new parent's index key.
• The middle of those three index keys goes up to the grandparent above to separate
the old and new parents.

Ketika old parent adalah sebuah root, tidak ada grandparent yang dapat digunakan
untuk menggabungkan parent baru ke dalam tree. Oleh karena itu dibuatlah
grandparent baru yang akan menjadi root baru.

Hasil akhir ketika membuat root baru:

2.3. Deletion
Karena data hanya disimpan di dalam leaf, maka harus dilakukan pencarian sampai ke
node leaf untuk sebuah data yang ingin dihapus. Data yang dihapus harus berupa leaf.
Contoh:

COMP6601 – Data Structures


Delete 68. Parent dari leaf 68 memiliki 3 anak, sehingga dapat langsung dihapus.

Parent hanya akan memiliki 2 anak sehingga hanya boleh memiliki 1 key index. Key
index apa yang seharusnya ada dalam parent? Parent dari 2 leaf seharusnya berisi data
dari key index yang diambil dari child dengan nilai yang paling besar.

Ketika 1 dari 3 leaf child dihapus, nilai dari child dengan nilai terbesar akan menjadi
parent key index.

Parent dari leaf 68 yang ingin dihapus memiliki 3 anak, sehingga nodenya tetap valid.

Delete 56:

COMP6601 – Data Structures


Ketika menghapus node 56, parentnya akan hanya memiliki 1 child, yang tidak
diperbolehkan.

COMP6601 – Data Structures


Parent memiliki sibling di sebelahnya yang memiliki 3 anak, sehingga kita bisa
melakukan “adopt” child dari sibling dengan 3 child tersebut.

Key index dari parent, sibling dan parent mereka harus disesuaikan. Cara
menyesuaikan key indexnya adalah dengan cara mengecek apakah sibling berada di
kanan dan kg adalah key dalam grandparent yang membagi kedua sibling tersebut.

Setelah proses delete 56, proses adopt child paling dekat dari siblingnya dihasilkan
tree seperti berikut ini:

COMP6601 – Data Structures


Delete 68:

Ketika melakukan proses delete 68, maka parentnya hanya akan memiliki 1 anak,
dimana hal ini tidak diperbolehkan, sehingga harus dilakukan proses adopt ke child
yang paling dekat yang memiliki 3 anak.

Key index dari parent, sibling dan parent mereka harus disesuaikan. Cara
menyesuaikan key indexnya adalah dengan cara mengecek apakah sibling berada di
kiri dan kg adalah key dalam grandparent yang membagi kedua sibling tersebut.

Setelah proses delete 68, proses adopt child paling dekat dari siblingnya dihasilkan
tree seperti berikut ini:

COMP6601 – Data Structures


Delete 56. Parent dari 56 akan mempunya 1 child:

Tidak ada sibling yang memiliki 3 child, jadi parent dengan 1 child tidak dapat
mengambil child yang tersisa, sehingga 1 child yang tersisa harus diambil oleh salah
satu parent siblingnya.

Setelah menghapus 56, 1 child tersisa dari parentnya (34) akan diambil oleh parent
sibling yang ada di sebelah kiri:

Ketika sibling kiri mengambil anak yang tersisa dari parentnya, key index harus
diperbaiki, dengan mengecek jika kg adalah key index dari grandparent yang
membagi sibling dan parentnya:

Perhatikan bahwa grandparentnya sekarang hanya memiliki 1 child (jika node tersebut
memiliki 2 anak sebelumnya). 1 child ini akan menjadi permasalahan yang akan
berulang sampai root.

COMP6601 – Data Structures


Setelah menghapus node 56, child yang tersisa dari parentnya (34) akan diambil oleh
parent sibling ke kiri. Grandparent yang sebelumnya memiliki 3 child sekarang hanya
mempunyai 2 anak, sehingga proses deletion sudah selesai.

Delete 25:

Setelah menghapus node 25, parent (30) hanya memiliki 1 anak:

Setelah menghapus node 25, parent (30) hanya memiliki 1 anak tanpa sibling dengan
extra child, sehingga 1 child yang tersisa (30) akan diambil oleh parent siblingnya:

COMP6601 – Data Structures


Setelah grandparent (35) hanya memiliki 1 child yang tersisa tanpa memiliki sibling
dengan extra child, maka 1 child yang tersisa diambil oleh parent sibling.

Sekarang root hanya memiliki 1 anak tersisa, sehingga dapat dilakukan proses untuk
menghapus root tersebut dan menjadikan child dari root tersebut sebagai root baru.

Root hanya memiliki 1 anak yang tersisa, sehingga kita menghapus rootnya

COMP6601 – Data Structures


SIMPULAN

2-3 Tree adalah sebuah tree dalam data structure yang setiap nodenya memiliki 2 child
dengan masing-masing 1 data atau 3 child dengan masing-masing 2 data. 2-3 Tree bukan
merupakan Binary Tree.

Each internal node (non leaf) is either a 2-node or a 3-node.


• 2-node : has one data and two children (left and middle child)
• 3-node : has two data and three children (left, middle and right child)

All data are kept in sorted order.


• Let A be the data stored in a 2-node. Left sub-tree should contain data less than A,
middle sub-tree should contain data greater than A.
• Let A and B the data stored in a 3-node. Left sub-tree should contain data less than A,
middle sub-tree should contain data greater than A and less than B, right sub-tree
should contain data greater than B.

Operation:
• Searching
• Insertion
• Deletion

COMP6601 – Data Structures


DAFTAR PUSTAKA

1. Reema Thareja,. 2011. Data structures using C. OXFOR. New Delhi. ISBN:978-0-19-
806544-9

2. Robert Guderian, 2-3 Tree


http://www.cs.umanitoba.ca/~chrisib/teaching/comp2140/notes/009c_23trees.pdf

COMP6601 – Data Structures

Anda mungkin juga menyukai