Jelajahi eBook
Kategori
Jelajahi Buku audio
Kategori
Jelajahi Majalah
Kategori
Jelajahi Dokumen
Kategori
ADT Tree
Fasilkom UI
Fasilkom UI - IKI20100
Tujuan
Mengenali aplikasi tree. Mengetahui cara melakukan operasi untuk tiap-tiap element pada tree (tree traversal)
Fasilkom UI - IKI20100
Outline
Tree
Contoh terminologi/definisi
Fasilkom UI - IKI20100
Contoh
Fasilkom UI - IKI20100
Contoh
Fasilkom UI - IKI20100
Contoh
File system
Fasilkom UI - IKI20100
Istilah-istilah umum:
A is the root node B is the parent of D and E C is the sibling of B D and E are the children of B D, E, F, G, I are external nodes, or leaves A, B, C, H are internal nodes The depth/level/path length of E is 2 The height of the tree is 3 The degree of node B is 2 Property: (# edges) = (#nodes) - 1
Fasilkom UI - IKI20100
Fasilkom UI - IKI20100
Binary Tree
Binary tree: tree di mana semua internal nodes memiliki degree 2 Ordered/Search tree: seluruh children dari tiap node terurut
Fasilkom UI - IKI20100
Fasilkom UI - IKI20100
10
Jika dibatas bahwa tiap node hanya memiliki dua node anak (children), maka: (# external nodes ) = (# internal nodes) + 1 (# nodes at level i) e 2i (# external nodes) e 2 (height) (height) u log2 (# external nodes) (height) u log2 (# nodes) - 1 (height) e (# internal nodes) = ((# nodes) - 1)/2
Fasilkom UI - IKI20100
11
Jumlah maksimum node dalam binary tree dengan tinggi k adalah 2k+1 -1.
Sebuah full binary tree dengan tinggi k adalah sebuah binary tree yang memiliki 2k+1 - 1 nodes. Sebuah complete binary tree dengan tinggi k adalah binary tree yang miliki jumlah maximum nodes di levels 0 sampai k - 1.
Fasilkom UI - IKI20100
12
Fasilkom UI - IKI20100
13
ADT tree menyimpan referensi dari root node, yang merupakan awal untuk mengakses tree.
public class BinaryTree<A> { private BinaryNode<A> root; public BinaryTree( ) { root = null; } }
Fasilkom UI - IKI20100
14
Berfikir Rekursif
Menghitung tinggi tree dapat menjadi program yang rumit bila tidak menerapkan rekursif. Tinggi sebuah tree adalah: maksimum tinggi dari subtree ditambahkan satu (tinggi dari root).
HL+1
HR+1 HL HR
Fasilkom UI - IKI20100
15
Fasilkom UI - IKI20100
16
sebuah binary tree terdiri dari sebuah node dengan dua buah sub tree (kiri dan kanan) yang masing-masing adalah tree juga.
Algoritma untuk Binary Tree akan lebih mudah dinyatakan secara rekursif. Binary tree memiliki dua kasus rekursif
Base case: empty leaf external node. Recursive case: Sebuah internal node (root) and dua binary trees (subtree kiri dan subtree kanan)
Fasilkom UI - IKI20100
18
Print Pre-Order
class BinaryNode { void printPreOrder( ) { System.out.println( element ); if( left != null ) left.printPreOrder( ); if( right != null ) right.printPreOrder( ); } } class BinaryTree { public void printPreOrder( ) { if( root != null ) root.printPreOrder( ); } } // Node // Left // Right
Fasilkom UI - IKI20100
19
Fasilkom UI - IKI20100
20
Print Post-Order
class BinaryNode { void printPostOrder( ) { if( left != null ) left.printPostOrder( ); if( right != null ) right.printPostOrder( ); System.out.println( element ); } } class BinaryTree { public void printPostOrder( ) { if( root != null ) root.printPostOrder( ); } }
Fasilkom UI - IKI20100
21
Fasilkom UI - IKI20100
22
Contoh: Urutan penulisan ekspresi aritmatika Mencetak sebuah expressi aritmatika. print ( before traversing the left subtree print ) after traversing the right subtree
Fasilkom UI - IKI20100
23
Print InOrder
class BinaryNode { void printInOrder( ) { if( left != null ) left.printInOrder( ); System.out.println( element ); if( right != null ) right.printInOrder( ); } } class BinaryTree { public void printInOrder( ) { if( root != null ) root.printInOrder( ); } }
Fasilkom UI - IKI20100
24
Traversing Tree
Pre-Order
Post-Order
InOrder
Fasilkom UI - IKI20100
25
Algoritma traversing mana yang sesuai untuk melakukan operasi perhitungan nilai expressi aritmatika yang direpresentasikan menggunakan binary tree?
Fasilkom UI - IKI20100
26
Algorithm evaluateExpression(v) if v is an external node return nilai bilangan pada v else x = evaluateExpression(leftChild(v)) y = evaluateExpression(rightChild(v)) Misalkan o adalah operator pada v return x o y
Fasilkom UI - IKI20100
27
Running Time
Strategy yang digunakan adalah postorder traversal: information dari node dihitung setelah informasi dari seluruh children dihitung. Postorder traversal running time adalah N (jumlah elemen dalam tree) dikalikan beban waktu untuk memproses tiap node. The running time -nya linear karena tiap node hanya diproses sekali dengan beban waktu konstan.
Fasilkom UI - IKI20100
28
Latihan
Asumsi: Sebuah binary tree (seluruh internal node memiliki degree 2) dengan elemen bilangan bulat.
Fasilkom UI - IKI20100
29
Terkadang, kita ingin memroses semua node tanpa perduli urutan. Agar mudah, kita mau looping sederhana Iterator Bagaimana caranya implementasi secara rekursif?
Bayangkan saat current node yang sedang diakses adalah sebuah internal node. Bagaimana menentukan node mana yang akan diakses selanjutnya? Pada fungsi rekursif, informasi ini implisit pada call stack.
Fasilkom UI - IKI20100
30
Kita dapat melakukan traversal non-rekursif dengan membuat stack sendiri. Dengan kata lain, meng-emulasikan: stack of activation records. Ya Kita dapat menyimpan hanya informasi yang penting saja dalam stack, sementara compiler menyimpan seluruh activation record. Namun demikian efisiensi yang dihasilkan tidak akan terlalu besar apalagi dengan teknologi optimisasi compiler yang semakin maju.
Mengapa?
Fasilkom UI - IKI20100
31
Tree iterator dan traversal-nya diimplementasikan secara non-rekursif menggunakan stack. Lihat code di:
https://telaga.cs.ui.ac.id/WebKuliah/IKI20 100/resources/weiss.code/TestTreeIterators .java
Fasilkom UI - IKI20100
32
Gunakan stack untuk menyimpan status terakhir. (node yang sudah dikunjungi tapi belum selesai diproses)
Fasilkom UI - IKI20100
33
Post-Order Algorithm/Pseudocode
Fasilkom UI - IKI20100
34
Fasilkom UI - IKI20100
35
Fasilkom UI - IKI20100
36
In-Order Algorithm/Pseudocode
init: push the root into the stack with state 0 advance:
while (not stack.empty()) node X = pop from the stack switch (state X):
case 0: push node X with state 1; push left child node X (if it exists) w/ state 0; break; case 1: push node X with state 2; visit/set current to the node X; return; case 2: push right child node X (if it exists) w/ state 0; break;
Fasilkom UI - IKI20100
37
In-Order Algorithm/Pseudocode
init: push the root into the stack with state 0 advance (optimize):
while (not stack.empty()) node X = pop from the stack switch (state X):
case 0: push node X with state 1; push left child node X (if it exists) w/ state 0; break; case 1: visit/set current to the node X; push right child node X (if it exists) w/ state 0; return;
Fasilkom UI - IKI20100
38
Fasilkom UI - IKI20100
39
Pre-Order Algorithm/Pseudocode
init: push the root into the stack with state 0 advance:
while (not stack.empty()) node X = pop from the stack switch (state X): case 0: visit/set current to the node X; push node X with state 1; break; case 1: push right child node X (if it exists) w/ state 0; push node X with state 2; break; case 2: push left child node X (if it exists) w/ state 0; break;
Fasilkom UI - IKI20100
40
Pre-Order Algorithm/Pseudocode
Fasilkom UI - IKI20100
41
Latihan
Fasilkom UI - IKI20100
42
generic traversal pada binary tree Strategi traversal preorder, inorder, dan postorder adalah kasus khusus dari Euler tour traversal
walk around the tree dan kunjungi tiap node tiga kali:
dari arah parent. dari sub tree kiri dari sub tree kanan
Fasilkom UI - IKI20100
43
Level-order Traversal
Kunjungi root diikuti oleh seluruh node pada sub tree dari kiri ke kanan kemudian diikuti oleh node pada sub tree-nya lagi. Tree dikunjungi berdasarkan level. Pada tree dibawah urutan kunjungan adalah: A - B - C -D-E-F-G-H-I
Fasilkom UI - IKI20100
44
init: enqueue the root into the queue advance: node X = dequeue from the queue visit/set current to the node X; enqueue left child node X (if it exists); enqueue right child node X (if it exists);
Fasilkom UI - IKI20100
45
Parent (i) terletak pada index i/2 if i {1; for i =1, tidak ada parent. Left-child (i) terletak pada 2i if 2i e n. (else tidak ada leftchild) Right-child (i) terletak pada 2i+1 if 2i +1 e n (tidak ada right-child)
Fasilkom UI - IKI20100
46
Latihan
Pada ADT tree yang berisikan elemen bilangan bulat. Hitung elemen paling kecil pada leaves dan update seluruh leaves pada tree tersebut dengan elemen terkecil tersebut. (Repmin problem) Tantangan: Apakah algoritma anda dapat melakukannya dengan satu kali traversal?
nput
Ruli Manurung & Ade Azurat Fasilkom UI - IKI20100
Output
2007/2008 Ganjil Minggu 8
47