1 Pertemuan 14 2-3 Tree Matakuliah: T0026/Struktur Data Tahun: 2005 Versi: 1/1.

Slides:



Advertisements
Presentasi serupa
STRUKTUR DATA (10) tree manipulation
Advertisements

Binary Trees adalah parent
BAB 9 TREE Tujuan Instruksional Umum:
By : Fitroh Amaluddin & Galih Wasis W.
Algoritma dan Struktur Data
Algoritma dan Struktur Data
Implementasi Binary Tree
Tree.
Pertemuan Struktur Data *Pohon Ekspresi *
Operasi pada pohon biner
Algoritma dan Struktur Data
LINKED LIST by Yohana N.
Struktur Data List Linear : Linked List (Double Linkedlist)
Algoritma dan Struktur Data
Z Bekti - Rita - Sevenhot Struktur Data & Algoritma 2009.
ADT Tree 2007/2008 – Ganjil – Minggu 8.
Binary Search Tree 2007/2008 – Ganjil – Minggu 9.
Structure Data - Array Pertemuan 7 Matakuliah: T0456 / Algoritma dan Metode Object Oriented Programming Tahun: 2007.
Tenia Wahyuningrum, S.Kom. MT
Struktur Data List Linear : Linked List (Single Linkedlist)
STRUKTUR DATA tree manipulation
BINARY TREE Universitas Ahmad Dahlan
Pertemuan 13 Graph + Tree jual [Valdo] Lunatik Chubby Stylus.
Algoritma dan Struktur Data
Matakuliah : T0534/Struktur Data Tahun : 2005 Versi : September 2005
Matakuliah : T0026/Struktur Data Tahun : 2005 Versi : 1/1
Red-Black Trees.
Pertemuan 10 Binary Search Tree
Matakuliah : T0534/Struktur Data Tahun : 2005 Versi : September 2005
Pertemuan 8 Stack dengan Array
Pertemuan 9 Stack dengan Linked-list
Pertemuan 15 Red-Black Tree (RBT)
Organisasi Berkas Sekuensial Berindeks
1 Pertemuan 17 Heaps Matakuliah: T0026/Struktur Data Tahun: 2005 Versi: 1/1.
1 Pertemuan 12 B-Tree Matakuliah: T0534/Struktur Data Tahun: 2005 Versi: September 2005.
Binary Search Tree. Sebuah node di Binary Search Tree memiliki path yang unik dari root menurut aturan ordering – Sebuah Node, mempunyai subtree kiri.
Struktur Data Tree Eka Rahayu S. (2 Agustus 2011).
Binary Tree.
Binary Tree.
Defri Kurniawan POHON DAN POHON BINER Defri Kurniawan
Struktur Data Binary Search Tree (BST)
Matakuliah : T0534/Struktur Data Tahun : 2005 Versi : September 2005
Manipulasi Tree.
Tim Struktur Data Program Studi Teknik Informatika UNIKOM
STRUKTUR DATA Tree (Struktur Pohon).
Tim Struktur Data Program Studi Teknik Informatika UNIKOM
STRUKTUR DATA 2014 M. Bayu Wibisono.
Tim Struktur Data Program Studi Teknik Informatika UNIKOM
Manipulasi Tree.
Tree.
Teknik Informatika - Universitas Muhammadiyah Malang (UMM)
Matakuliah : T0026/Struktur Data Tahun : 2005 Versi : 1/1
Linked List 6.3 & 7.3 NESTED LOOP.
Algoritma dan Struktur Data
Pertemuan 6 Queue dengan Array
Tim Struktur Data Program Studi Teknik Informatika UNIKOM
QUEUE (ANTRIAN) Queue atau antrian didefinisikan sebagai kumpulan dari obyek-obyek yang homogen dengan operasi penambahan elemen (Enqueue) dan pengambilan.
Tree (Pohon).
Oleh Shoffin Nahwa Utama, S.Kom
IT234 Algoritma dan Struktur Data
Binary Search Tree (BST)
Tree.
IT234 Algoritma dan Struktur Data
Pohon Biner.
Algoritma dan Struktur Data
Binary Search Tree (BST)
IT234 Algoritma dan Struktur Data
TREE Oleh : Neny silvia Nurhidayah Afny wilujeng Setyorini
Binary Search Tree (BST)
Review Struktur Data Nisa’ul Hafidhoh, MT.
Transcript presentasi:

1 Pertemuan Tree Matakuliah: T0026/Struktur Data Tahun: 2005 Versi: 1/1

2 Learning Outcomes Pada akhir pertemuan ini, diharapkan mahasiswa akan mampu : Mahasiswa dapat menghasilkan program modular untuk mengimplementasikan ADT 2-3 tree

3 Outline Materi Pengertian dan kegunaan 2-3 Tree Contoh 2-3 Tree Operasi insert data 2-3 Tree Operasi delete data 2-3 tree implementasi program 2-3 tree

4 Tree 2-3 Semua leaf pada level yang sama (balanced tree) Elemen pada semua leaf terurut secara ascending dari kiri ke kanan Semua node (kecuali leaf) merupakan : –2-node : 1 node punya 1 elemen dan 2 children, atau2-node –3-node : 1 node punya 2 elemen dan 3 children3-node 2-node3-node Contoh Tree 2-3 :

5 Representasi tree 2-3 yang digunakan dalam pembahasan di sini adalah : typedef two_three*two_three_ptr; struct two_three { elementdata_l, data_r; two_three_ptr left_child, middle_child, right_child; } data_rleft_chmiddle_chdata_lright_ch Field dalam struct two_three : data_ldata_r left_chmiddle_chright_ch Bentuk node :

6 Organisasi Tree 2-3 Ada 3 macam bentuk organisasi dalam tree 2-3 : 1.tree 2-3 yang kosong 2.tree 2-3 yang terdiri dari satu ROOT 2- node dan mempunyai 2 children, masing- masing tree 2-3 (>)> 3.tree 2-3 yang terdiri dari satu ROOT 3- node dan 3 children, masing-masing tree 2-3 (>)>

7 2-node node A : Nilai data_l = elemen 40 Tidak ada elemen di data_r, nilai data_r = INT_MAX Nilai left_child = alamat node B Nilai middle_child = alamat node C Nilai right_child = NULL 40 left_child middle_child data_ldata_r A BC Nilai variabel node B & C ?

8 3-node Isi dari node A, B, C, D ? < 40> <…< 60 A BC D Node B (left_child node A) berisi elemen < data_l node A Node C (middle_child node A) berisi elemen data_l < … < data_r node A Node D (right_child node A) berisi elemen > data_r node A

9 Operasi Insert pada Tree 2-3 Dalam tree 2-3, tidak boleh ada elemen kunci yang sama. (Misalnya dalam daftar mahasiswa, nama boleh sama tetapi NIM harus berbeda. NIM berfungsi sbg elemen kunci (key element). Elemen kunci bersifat unik. Pd pembahasan insert, elemen dianggap sbg elemen kunci) Elemen baru diinsert pada node leaf Setelah insert, tree harus tetap memenuhi syarat tree 2-3

10 Algoritma Insert Elemen y 1.Cari leaf yang tepat bagi y Persis dgn BST, bandingkan y dgn isi node2 pd path yang tepat, dari ROOT turun menuju leaf. jika y sudah ada pd tree, insert gagal jika tree masih kosong, create root baru dengan elemen y di data_l (>)> jika leaf yang tepat telah ditemukan, ada 3 kemungkinan: 2.A: Leaf hanya punya 1 elemen (data_l) (>)> jika y > data_l : masukkan y sbg data_r (data_r = y) jika sebaliknya: geser elemen lama (data_r = data_l), dan masukkan y sbg data_l (data_l = y).

11 3.B: Leaf berisi 2 elemen (FULL) dan parent berisi 1 elemen –Bandingkan ketiga elemen (2 elemen leaf dan y). Nilai tengah dimasukkan ke parent. –Jika leaf adalah left_child dari parent, geser elemen parent ke kanan dan masukkan nilai tengah ke data_l parent. Pointer left_child dan middle_child pada parent harus digeser. –Jika leaf adalah middle_child dari parent, masukkan nilai tengah ke data_r parent. –Dua nilai terkecil dan terbesar, akan menjadi elemen pertama pada leaf yang lama dan leaf yang baru.

12 4.C: Jika leaf dan parent sudah berisi 2 elemen (FULL) −Seperti kasus B, nilai tengah diserahkan pada parent. Karena parent sudah full, dilakukan hal yang sama menuju root hingga bertemu dgn 2-node. −Jika pada path dari leaf hingga root, semua node merupakan 2-node, akan terbentuk root baru dengan elemen nilai tengah. Nilai terkecil dan terbesar akan menjadi 2 children dari root baru. “Doing a few small 2-3 trees by hand helps to understand this algorithm”

13 Contoh Insert 10 A + 10 A C A B C A B + 20 > > > > C AB > + 30

C ABD Contoh Insert (lanjutan) A B C D E F G > >

15 Contoh Insert

16

17 void insert23 (two_three_ptr *t, element y) { /* t menunjuk ke ROOT, y: elemen baru */ two_three_ptrp, q, temp; if (!(*t) ) new_root (t, y, NULL); // jika tree2-3 kosong /* Isi node root: data_l = y, data_r = INT_MAX, left_child = NULL, middle_child = NULL, right_child = NULL */ Contoh Fungsi Insert (tidak lengkap)

18 else { // tree tidak kosong p = find_node (*t, y); if (p==NULL) fprintf (stderr, “The key is currently in the tree\n”); exit (1); } /*find_node m encari elemen y dalam tree. Jika y ada, p = NULL. Jika belum ada, p berisi pointer (alamat) node. Fungsi find_node menggunakan stack untuk menyimpan pointer node2 dalam path root hingga leaf. Pointer2 ini diperlukan jika terjadi split pada proses insert */

19 q = NULL ; for ( ; ; ) { if (p  data_r.key == INT_MAX) { / / p 2-node put_in (&p, y, q); break; } /* jika y > data_l, fungsi p ut_in insert elemen y di data_r (data_r = y), meletakkan subtree/node q di right_child., (right_child = q). Jika y < data_l, geser elemen lama (data_r = data_l), geser middle_child (middle_child = y), masukkan y (data_l = y) */

20 else { // p 3-node split (p, &y, &q); if (p == *t) { / / split the root new_root (t, y, q); break; } /* Input fungsi split adalah node p dgn 2 elemen dan y. Outputnya adalah node p, node baru q dan elemen y. p  data_l berisi elemen terkecil diantara 3 elemen. q  data_l berisi elemen terbesar. y berisi median, dan di-insert ke node parent p & q */ else p = delete(); / / ambil pointer parent p } // else

21 Delete Elemen Penghapusan elemen berlawanan 1.Cari elemen yang akan dihapus 2.Jika elemen berada di leaf p a)Jika p 3-node (berisi 2 elemen) Elemen langsung dihapus, shg p hanya memiliki 1 elemen b)Jika p 2-node (berisi 1-elemen) Node parent p disebut r, dan sibling kiri/kanan p adalah q.

22 Delete Elemen (lanjutan) Jika sibling q 3-node, dilakukan rotasi, elemen parent r diletakkan di p dan elemen q diletakkan di r Jika sibling q 2-node, dilakukan penggabungan q dan q, sehingga jumlah children r berkurang 1 c)Jika setelah rotasi/penggabungan node parent r kosong, berarti r = root, maka node p dijadikan root baru

23 3.Jika elemen yang akan dihapus tidak ada di leaf, maka elemen tsb akan digantikan elemen terbesar dari subtree kiri atau elemen terkecil dari subtree kanan yang berada di leaf. Selanjutnya penghapusan elemen di leaf akan mengikuti langkah 2. Delete Elemen (lanjutan)

24 Delete (1) Delete pada 3-node Delete pada 2-node sebuah node khusus yang mempunyai 1 subtree (node eksternal) : node eksternal

25 Delete (2) Kasus 1 : Node kosong setelah elemen dihapus. Sibling dan parent 2-node, sehingga harus dilakukan penggabungan (combine)

26 Delete(3) Kasus 2: Node kosong setelah elemen dihapus. Sibling 3-node dan parent 2-node, sehingga dilakukan rotasi

27 Delete(4) Kasus 3a: Node kosong mempunyai sibling 2-node dan parent 3-node. Subtree d lebih tinggi daripada subtree a, b, c. Pada kasus ini dilakukan penggabungan.

28 Delete(5) Kasus 3b: Node kosong mempunyai sibling 2-node dan parent 3-node. Subtree d lebih tinggi daripada subtree a, b, c. Pada kasus ini dilakukan penggabungan. Jika node kosong merupakan middle_child dari parentnya, dapat dilakukan penggabungan dari kiri atau dari kanan. Lihat Delete (4) dan Delete (5).

29 Delete(6) Kasus 4a dan 4b : Dilakukan rotasi, jika sibling dan parent dari node kosong merupakan 3-node

30 Delete(2) Rotasi dilakukan jika salah satu node sibling merupakan 3-node - 90

31 Delete(3) Gabung: jika semua node sibling merupakan 2-node

32 Delete(4)

33 Contoh Delete (a)

34 Contoh Delete(b)

35 Contoh Delete (c)

36 Contoh Delete(d)

37 Contoh Delete (e)

38 Contoh Delete (f)

39 Delete (g)

40 Contoh Fungsi-fungsi Delete (1) /* hapus x dari leaf p */ if (x == p  data_l) if (p  data_r != INT_MAX) {// p 3-node p  data_l = p  data_r; p  dadta_r = INT_MAX; } else// p 2-node p  data_l = INT_MAX;// terus ? else//x = p  data_r p  data_r = INT_MAX;

41 /* rotasi jika p anak kiri r */ p  data_l = r  data_l; r  data_l = q  data_l; q  data_l = q  data_r; q  data_r = INT_MAX; p  middle_child = q  left_child; q  left_child; = q  middle_child; q  middle_child = q  right_child Contoh Fungsi-fungsi Delete (2) p r q

42 /* penggabungan jila p anak kiri dari r */ p  data_l = r  data_l; p  data_r = q  data_l; p  middle_child = q  left_child; p  right_child = q  middle_child; if (r  data_r == INT_MAX) r  data_l = INT_MAX; else { r  data_l = r  data_r; r  data_r = INT_MAX; r  middle_child = r  right_child; } Contoh Fungsi-fungsi Delete (3)