Kode MK/ Pemrograman Terstruktur 2 ZK Abdurahman Baizal KK Algoritma dan Komputasi
Tree (Pohon)
1
8/25/2015
Pendahuluan Dalam bab ini kita akan khusus membahas mengenai binary tree Pembahasan tentang tree beserta definisinya, sudah dibahas pada matakuliah Matematika Diskrit Binary tree adalah kasus khusus dari tree, yang banyak digunakan sebagai struktur data dalam dunia pemrograman
2
8/25/2015
IKG2A3/Pemrograman Terstruktur 2
Pohon Biner (Binary Tree) Kumpulan simpul yang mungkin kosong atau mempunyai akar dan dua subpohon yang saling terpisah (left subtree dan right subtree) Derajat maksimal = 2 Complete binary tree tingkat N : pohon biner yang semua daunnya terdapat pada tingkat N dan semua simpul yang lebih kecil dari Npasti mempunyai cabang kiri dan kanan – Banyak simpul maksimum pada tingkat N = 2N-1 – Banyak simpul maksimum sampai tingkat N = 2 N -1 Skewed binary tree : pohon biner yang banyaknya simpul cabang kiri tidak seimbang dengan banyak simpul cabang kanan 3
8/25/2015
A B
Pohon Biner
C
D
E
I
J
G K
H
L
M N
B D I
C E
J
F K
L
A
B
G
H M
N
8/25/2015
A
A
A
Bukan Pohon Biner
4
O
D
I O
E
J
B
C G
K
H
B
C
D I
M
N
C
O
I
E
I C
Representasi Logic Pohon Biner Kamus Umum Type Infotype : ............{terdefinisi} Type address : ^Node Type Node : < Info : Infotype, Left : address, Right : address > Type BinTree : address
5
8/25/2015
Beberapa Primitive Pada Tree Function Akar (P:BinTree) infotype {mengirimkan infomasi yang tersimpan dalam akar dari pohon biner yang tidak kosong} KAMUS ALGORITMA info(P)
6
8/25/2015
Beberapa Primitive Pada Tree Function AnakKiri(P:BinTree) infotype {mengirimkan anak kiri dari pohon biner yang tidak kosong} KAMUS ALGORITMA Left(P)
7
8/25/2015
Beberapa Primitive Pada Tree Function AnakKanan(P:BinTree) infotype {mengirimkan anak kanan dari pohon biner yang tidak kosong} KAMUS ALGORITMA Right(P)
8
8/25/2015
Beberapa Primitive Pada Tree function Tree(A:Infotype, L: BinTree, R :BinTree) BinTree {Menghasilkan sebuah pohon Biner dari A, L dan R jika alokasi berhasil} {Menghasilkan pohon kosong jika alokasi gagal} KAMUS P :BinTree ALGORITMA Allocate(P) Info(P) A Left(P) L Right(P) R P 9
8/25/2015
Beberapa Primitive Pada Tree procedure MakeTree(input A:Infotype, L: BinTree, R :BinTree; output P :BinTree) {IS : sembarang} {FS : Menghasilkan sebuah pohon P dari A, L dan R } KAMUS ALGORITMA Info(P) A Left(P) L Right(P) R
10
8/25/2015
Beberapa Primitive Pada Tree function SimpulBaru(A:Infotype) address {Menghasilkan sebuah simpul baru yang berisi informasi A jika alokasi berhasil} KAMUS B : address ALGORITMA Allocate(B) Info(B) A Left(B) Nil Right(B) Nil B
11
8/25/2015
Beberapa Primitive Pada Tree function IsUnerLeft(P:BinTree) boolean {Prekondisi : P tidak kosong. Mengirmkan True jika P adalah pohon unerleft: hanya mempunyai SubPohon Kiri} KAMUS ALGORITMA Right(P)=Nil and Left(P) Nil
12
8/25/2015
Beberapa Primitive Pada Tree function IsUnerRight(P:BinTree) boolean {Prekondisi : P tidak kosong. Mengirmkan True jika P adalah pohon unerright: hanya mempunyai SubPohon Kanan} KAMUS ALGORITMA Leftt(P)=Nil and Right(P) Nil
13
8/25/2015
Beberapa Primitive Pada Tree function IsNotEmptyBin(P:BinTree) boolean {Mengirmkan True jika pohon biner tidak kosong, P adalah pohon biner : mempunyai SubPohon Kiri dan Kanan} KAMUS ALGORITMA Leftt(P) Nil and Right(P) Nil
14
8/25/2015
Kunjungan pada Pohon Biner (traversal) Dalam operasi traversal, akan diperoleh secara lengkap informasi yang disimpan pada suatu pohon biner. Urutan Informasi ini sangat tergantung pada letak simpul-simpul pada pohon biner tersebut. Jenis traversal pada pohon biner : – Pre Order – In Order – Post Order 15
8/25/2015
Kunjungan pada Pohon Biner (traversal) A B D I
C E
J
G K
H
L
M N
16
8/25/2015
O
Kunjungan PreOrder : ABDIEJKCGLMNOH Kunjungan InOrder : IDBJEKALGNMOCH Kunjungan PostOrder: IDJKEBLNOMGHCA
Kamus Umum KAMUS Type Infotype : ............{terdefinisi} Type address : ^Node Type Node :
Type BinTree : address Type addressS : ^ElmtStack ElmtStack : < InfoS : BinTree, Next : addressS > Stack : < TOP : addressS >
17
8/25/2015
Primitive yang akan digunakan Procedure Push (Input/Output S : Stack; Input E : BinTree) {Menambahkan sebuah elemen baru pada TOP, dengan elemen yang diketahui informasinya} Kamus Q: addressS Algoritma Allocate (Q) {alokasi selalu berhasil} Info(Q) E {Insert sebagai elemen pertama} Next (Q) TOP(S) TOP(S) Q
18
8/25/2015
Primitive yang akan digunakan Procedure PopStack (Input/Output S : Stack; Output E : BinTree) {I.S : stack tidak kosong} {F.S : elemen TOP disimpan pada E, alamat Top yang lama didealokasi} {Menghspus elemen stack, stack tidak boleh kosong dan mungkin seteleh penghapusan stack menjdai kosong} Kamus Q : addressS Algoritma If (S <> Nil) then Q TOP(S) E Info(S) TOP(S) Next (TOP(S)) Dealokasi (Q)
19
8/25/2015
Preorder Urutan traversal/kunjungan : – cetak isi simpul – kunjungi cabang kiri – kunjungi cabang kanan
20
8/25/2015
Preorder Non Rekursif Procedure PreOrder(Input P : BinTree) {I.S : terdefinisi Binary Tree P, mungkin kosong} {F.S : Mencetak informasi yang disimpan dalam binary Tree P secara PreOrder, non rekursif} Kamus S : Stack Q : BinTree Algoritma If P = Nil then Output (‘Tree Kosong’) Else S Nil {Inisialisasi tumpukan} Push (S,P) {push simpul akar} While (S <> Nil) Pop(S,Q) {Pop Ujung Tumpukan} While Q <> Nil Output (Info(Q)) {kunjungan ke simpul, cetak} If (Right(Q)) Nil then {ada cabang kanan, push ke stack} push(S,Right(Q)) Q Left(Q) 21
8/25/2015
Preorder Rekursif Procedure PreOrder_Rekursif(Input P : BinTree) {I.S : terdefinisi Binary Tree P, P mungkin kosong} {F.S : Mencetak informasi yang disimpan dalam binary Tree P secara PreOrder, rekursif} Kamus Algoritma If (P Nil) then Output (Info(P)) PreOrder_Rekursif(Left(P)) PreOrder_Rekursif(Right(P))
22
8/25/2015
Inorder Urutan InOrder : – kunjungi cabang kiri – cetak simpul – kunjungi cabang kanan
23
8/25/2015
Inorder Non rekursif Procedure InOrder(Input P : BinTree) {I.S : terdefinisi Binary Tree P, mungkin kosong} {F.S : Mencetak informasi yang disimpan dalam binary Tree P secara InOrder, non rekursif} Kamus S : Stack Q : BinTree Algoritma If (P = Nil) then Output (‘Tree Kosong’) Else S Nil {Inisialisasi Tumpukan} Q P Repeat While (P Nil) {bergerak terlebih dulu ke cabang kiri dgn mempush akar} push(S,Q) Q Left(Q) {P = Nil} {Mempop dan mencetak ujung tumpukan} Pop(S,Q) Output (Info(Q)) {Bergerak ke kanan} Q Right(Q) Until (S = Nil) 24
8/25/2015
Inorder Rekursif Procedure InOrder_Rekursif(Input P : BinTree) {I.S : terdefinisi Binary Tree P, P mungkin kosong} {F.S : Mencetak informasi yang disimpan dalam binary Tree P secara InOrder, rekursif} Kamus Algoritma If (P Nil) then InOrder_Rekursif(Left(P)) Output (Info(P)) InOrder_Rekursif(Right(P))
25
8/25/2015
Post Order Urutan PostOrder : – kunjungi cabang kiri – kunjungi cabang kanan – cetak simpul
26
8/25/2015
Postorder Rekursif Procedure Order_Rekursif(Input P : BinTree) {I.S : terdefinisi Binary Tree P, P mungkin kosong} {F.S : Mencetak informasi yang disimpan dalam binary Tree P secara PostOrder, rekursif} Kamus Algoritma If (P Nil) then PostOrder_Rekursif(Left(P)) InOrder_Rekursif(Right(P)) Output (Info(P))
27
8/25/2015
Latihan Buatlah prosedur untuk traversal post order non rekursif
28
8/25/2015
Binary Search Tree (BST) Pencarian (searching) merupakan salah satu hal yang penting dalam ilmu komputer. Permaslaahannya adalah bagaimana mengimplementasikan algoritma pencarian yang efisien. Pohon pencarian biner adalah salah satu alat yang dapat menjamin hal ini. Dalam pohon pencarian biner, setiap simpul dilabelkan dengan kunci (atau data itu sendiri). Kunci adalah nilai yang membedakan setiap simpul dengan simpul lainnya, sehingga setiap kunci harus unik.
29
8/25/2015
Binary Search Tree (BST) Jika R adalah akar, dan semua kunci yang tersimpan pada setiap simpul tidak ada yang sama, maka – Semua simpul pada subpohon kiri mempunyai kunci lebih kecil dari kunci(R) – Semua simpul pada subpohon kanan mempunyai kunci dengan nilai lebih besar dari kunci(R)
30
8/25/2015
Contoh BST Pohon BST untuk data masukan dengan urutan sebagai berikut : 65, 34, 22, 45, 100, 120, 8 65 34 22 8 31
8/25/2015
100 45
120
Pencarian pada BST Pencarian data dilakukan melalui kunci. Misal kita akan mencari sebuah nilai, misal x. Jika kunci pada akar tidak sama dengan x, pencarian dilanjutkan pada subpohon kiri atau subpohon kanan, tergantung apakah x lebih besar atau lebih kecil dari kunci pada akar.
32
8/25/2015
Procedure Sisip_SimpulBaru(input A:infoype; input/output P:BinTree) {IS : terdefinisi Ordered BinaryTree P, P mungkin kosong } {FS : simpul baru berisi informasi A terdefinisi dan disisipkan pada Tree P} KAMUS Q,R,Baru : address ALGORITMA Baru SimpulBaru(A) If (P = nil) then {P masih kosong} P Baru Else {P tidak kosong} Q P {kedua pointer bantu menunjuk ke akar Tree P} R P {Mencari letak yang tepat untuk menyisipkan simpul baru} while (A <> Info(Q) and R <> Nil) Q R If A < Info(Q) then {Mencari ke Cabang Kiri} R Left(Q) Else R Right(Q) {Mencari ke Cabang Kanan} If (A = Info(Q)) then {Informasi A sudah ada pd Tree P} Output (‘simpul sudah ada’) Else If (A < Info(P)) then Left(Q) Baru Else Right(Q) Baru 33
8/25/2015
Latihan
1. Carilah referensi tentang aturan menghapus
suatu node dalam BST, dan buat prosedur untuk menghapus node
2. Buatlah sebuah BST sembarang, lihat apa yang
terjadi jika dilakukan traversal preorder, inorder dan postorder pada BST yang anda buat
34
8/25/2015
Latihan 3. Buat function untuk mencari sebuah nilai x pada BST function TreeSearch (P : bintree , x : integer) → address
4. Buat procedure untuk mencari nilai minimum pada BST Procedure Tree-Minimum (input P : bintree, output Pmin: address)
5 . Buat procedure untuk mencari nilai maksimum pada BST Procedure TreeMinimum (input P : bintree, output Pmax: address)
35
8/25/2015
6. Buat procedure that returns the successor (nilai yang lebih besar dari info(P), tapi paling dekat dengan info(P) ) of node P in BST, and NIL if info(P) is the largest key /info in the tree. (hint : anda bisa memanfaatkan procedure/fungsi yang sudah anda buat sebelumnya) Procedure TreeSuccessor (input P : bintree, output Psucc : address)
7. Buat procedure that returns the predecessor ( nilai yang lebih kecil dari info(P), tapi paling dekat dengan info(P) ) of node P in BST, and NIL if info(P) is the smallest key /info in the tree (hint : anda bisa memanfaatkan procedure/fungsi yang sudah anda buat sebelumnya) Procedure TreePredecessor (input P : bintree, output Ppred : address)
36
8/25/2015
Referensi Liem, Inggriani., Diktat Kuliah IF2181 Struktur Data, ITB, 2003. Munir, Rinaldi., Matematika Diskrit, Edisi Kedua, Penerbit Informatika Bandung, Bandung, 2003
37
8/25/2015
THANK YOU 8/25/2015 38