Pohon Biner Bagian 2 (Pohon Seimbang, Pohon Biner Terurut, Pembangunan Pohon Biner dari Pita Karakter/String)

dokumen-dokumen yang mirip
STRUKTUR POHON. HUTAN Definisi : hutan adalah sequence (list) dari pohon)

Pohon Biner (Bagian 1)

Penerapan Pohon Untuk Memanipulasi dan Meritrieve Data

Pohon Biner. Tim Pengajar IF2030 Semester I/ /8/2009 FNA/IF2030/Sem

Kode MK/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Tree (Pohon)

Variasi List Linier (Bagian 2)

Mesin Karakter dan Mesin Kata

GANJIL 2009/2010 NIM: Algoritma dan Struktur Data / CS2014 Nama :

List Linier (Bag. I) IF2121/Algoritma dan Struktur Data Sem. I 2016/ /25/2017 IF2121/Sem I 2017/2018 1

Kode : IF2121 NIM :... Matakuliah : Algoritma dan Struktur Data Nama :... Hari, Tanggal : Senin, 13 November 2017 Waktu : 150 Menit

BAB XI Manipulasi Binary Tree

Binary Tree kosong Gambar 1. Binary Tree dalam kondisi kosong

Binary Tree. Binary Tree dapat digambarkan berdasarkan kondisinya, sebagai berikut: Pointer ke akar (root) dari tree

Struktur Data. Queue (Antrian)

Tipe Rekursif: POHON (TREE)

ALGORITMA DAN STRUKTUR DATA

Binary Search Tree (BST)

IKG2A3/ Pemrograman Terstruktur 2

Kode MK/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Stack (Tumpukan)

List Linier. IF2030/Algoritma dan Struktur Data. 11/6/2009 FNA+WDS/IF2030/Sem

Optimalisasi Algoritma Pencarian Data Memanfaatkan Pohon Biner Terurut

6. TREE / BINARY TREE

ANALISIS ALGORITMA BINARY SEARCH

A B C E F G K Contoh Tree

TREE ALGORITMA & STRUKTUR DATA. Materi ASD Fakultas Teknik Elektro & Komputer UKSW ( Download Dari :

Array dan Matriks. IF2121 / Algoritma dan Struktur Data Sem / /7/2017 IF2121/sem /2018 1

POHON CARI BINER (Binary Search Tree)

ALGORITMA DAN STRUKTUR DATA

QUEUE Antrian 1. DEFINISI

MODUL PRAKTIKUM STRUKTUR DATA

Politeknik Elektronika Negeri Surabaya

LIST LINIER 1. DEFINISI

Bagian I. Studi Kasus [82] Tanda tangan:

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

Pemrograman Algoritma Dan Struktur Data

Algoritma dan Struktur Data. Binary Tree & Binary Search Tree (BST)

UJIAN AKHIR SEMESTER GANJIL 2005/2006 ALGORITMA & STRUKTUR DATA / CS2014

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

MODUL 6 SINGLE & DOUBLE LINKED LIST

Membuat Binary Search Tree Menggunakan STL Vector C++

PROGRAM STUDI S1 SISTEM KOMPUTER UNIVERSITAS DIPONEGORO. Oky Dwi Nurhayati, ST, MT

Studi Digital Tree dan Aplikasinya pada Kamus

Binary Tree. Binary Tree dapat digambarkan berdasarkan kondisinya, sebagai berikut: Pointer ke akar (root) dari tree

Algoritma Shell Sort Ascending Dan Binary Sequential Search Menggunakan C

Pencarian. 1. Memahami konsep pencarian 2. Mengenal beberapa algoritma pencarian 3. Menerapkan algoritma pencarian dalam program

Implementasi Struktur Data Stack (Tumpukan) dalam Tower of Hanoi Game

Penerapan Divide and Conquer dalam Membandingkan Alur Proses 2 Source Code

Algoritma dan Struktur Data. Ramos Somya, S.Kom., M.Cs.

Penerapan Pohon Dalam Heap Sort

Algoritma dan Struktur Data. Ramos Somya

MODUL PRAKTIKUM STRUKTUR DATA Modul ke-1, Pertemuan ke-1 Nama file : P01-XXX (XXX adalah 3 digit terakhir NIM) Deskripsi: Senarai, Traversal

Pohon Biner Sebagai Struktur Data Heap dan Aplikasinya

CCH1A4 / Dasar Algoritma & Pemrogramanan

A. Bagian I. Studi Kasus

Linked List 6.3 & 7.3 NESTED LOOP

REPRESENTASI FISIK LIST LINEAR

Buku Ajar Struktur Data

STRUKTUR DATA Pertemuan 1 s.d 8

STRUKTUR DATA. By : Sri Rezeki Candra Nursari 2 SKS

Everybody in this country should learn how to program a computer because it teaches you how to think. Steve Jobs

Penerapan Teknik Binary Search Tree Sebagai Alternatif Penyimpanan Data

UJIAN TENGAH SEMESTER KU1072/PENGENALAN TEKNOLOGI INFORMASI B SEM /2014

Algoritma Pemrograman & Struktur Data

TREE STRUCTURE (Struktur Pohon)

Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya.

STRUKTUR POHON (TREE) Pohon atau Tree adalah salah satu bentuk Graph terhubung yang tidak mengandung sirkuit.

MODUL PRAKTIKUM STRUKTUR DATA

LATIHAN UTS Tim Pengajar KU1071 Sem

Selamat Mengerjakan. 2. Keluaran dari baris 10 adalah? a. 1 b. 4 c. 2.5 d. 2 e Keluaran dari baris 11 adalah? a. 1 b. 4 c. 2.5 d. 2 e.

ALGORITMA & PEMROGRAMAN

Algoritma dan Struktur Data. Linear & Binary Search Tree

Konsep Pohon (Tree) Binary Tree Penyajian Tree dengan Array Penyajian Tree dengan Linked List Metode Traversal (Kunjungan Node pada Tree)

METODE AVL TREE UNTUK PENYEIMBANGAN TINGGI BINARY TREE

IT234 Algoritma dan Struktur Data. Tree

Decrease and Conquer

Tipe Data dan Operator

STRUKTUR DATA Pertemuan 1 s.d 8

BAB IX TREE (POHON) ISTILAH DASAR

STRUKTUR POHON (TREE) Pohon atau Tree adalah salah satu bentuk Graph terhubung yang tidak mengandung sirkuit.

Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya.

Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya.

Pert 3: Algoritma Pemrograman 1 (Alpro1) 4 sks. By. Rita Wiryasaputra, ST., M. Cs.

MAKALAH STRUKTUR DATA. DOSEN PEMBIMBING Nisa miftachurohmah, S.kom., M.Si PENYUSUN SITI JAMILATUL MU ADDIBAH ( )

Topic Complexity of Hashing Search & Binary Search Tree Algorithm

Silsilah keluarga Hasil pertandingan yang berbentuk turnamen Struktur organisasi dari sebuah perusahaan

BAB II STACK Atau TUMPUKAN

Pendahuluan Struktur Data. Nisa ul Hafidhoh

ALGORITMA DAN PEMROGRAMAN 2. 3 SKS By : Sri Rezeki Candra Nursari

Modul Praktikum Algoritma dan Struktur Data BAB 6 LINKED LIST

ANALISIS DAN PERANCANGAN PERANGKAT LUNAK

Struktur Data Tree/Pohon dalam Bahasa Java

1. Tipe Data Sederhana Hanya dimungkinkan untuk menyimpan sebuah nilai data dalam sebuah variabel Ada 5 macam : int, float, double, char, boolen

LIST. Dewi Sartika, M.Kom

KONSEP POINTER DAN LINKED LIST

Algoritma Euclidean dan Struktur Data Pohon dalam Bahasa Pemrograman LISP

BAB VII POHON BINAR POHON

Pertemuan 9 STRUKTUR POHON & KUNJUNGAN POHON BINER

Senarai berantai. linked list. Pertemuan keenam Struktur data st3telkom.ac.id. by : tenia wahyuningrum & Sisilia Thya Safitri

PENCARIAN KITAB BESERTA PASAL PADA ALKITAB BERDASARKAN KATA DENGAN MENGGUNAKAN STRUKTUR DATA TRIE

SENARAI BERANTAI (LINK LIST)

Transkripsi:

Pohon Biner Bagian 2 (Pohon Seimbang, Pohon Biner Terurut, Pembangunan Pohon Biner dari Pita Karakter/String) Tim Pengajar IF2030 Semester I/2009-2010 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 1

Pohon Biner Pohon biner adalah himpunan terbatas yang mungkin kosong, atau terdiri atas sebuah simpul yang disebut akar dan dua buah himpunan lain yang disjoint yang merupakan pohon biner, yang disebut sebagai sub pohon kiri dan sub pohon kanan dari pohon biner tersebut + 3 * b a a b 4 5 c c e d 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 2

Pohon Seimbang Pohon seimbang (balanced tree/b-tree) adalah pohon dengan: Perbedaan tinggi subpohon kiri dan subpohon kanan maksimum 1 Perbedaan banyaknya simpul subpohon kiri dan subpohon kanan maksimum 1 Aplikasi: pengelolaan indeks dalam file system dan database system Yang akan dibahas adalah pohon biner seimbang (balanced binary tree) 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 3

Algoritma untuk membuat pohon biner seimbang dari n buah node function BuildBalancedTree (n : integer) BinTree { Menghasilkan sebuah balanced tree } { Basis: n = 0: Pohon kosong } { Rekurens: n>0: partisi banyaknya node anak kiri dan kanan, lakukan proses yang sama } KAMUS LOKAL P : address; L, R : BinTree; X : infotype nl, nr : integer ALGORITMA if (n = 0) then { Basis-0 } Nil else {Rekurens } { bentuk akar } input(x) { mengisi nilai akar } P Alokasi(X) if (P Nil) then { Partisi sisa node sebagai anak kiri dan anak kanan } nl n div 2; nr n nl - 1 L BuildBalancedTree(nL); R BuildBalancedTree(nR) Left(P) L; Right(P) R P 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 4

Urutan Pembentukan Pohon Biner Seimbang 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 5

Binary Search Tree - 1 Binary Search Tree (BST)/pohon biner terurut/pohon biner pencarian adalah pohon biner yang memenuhi sifat: Setiap simpul dalam BST mempunyai sebuah nilai Subpohon kiri dan subpohon kanan merupakan BST Jika P adalah sebuah BST: semua simpul pada subpohon kiri < Akar(P) semua simpul pada subpohon kanan >= Akar(P) Aplikasi BST: algoritma searching dan sorting tingkat lanjut 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 6

Binary Search Tree - 2 Nilai simpul (Key) dalam BST bisa unik bisa juga tidak. Pada pembahasan ini semua simpul BST (Key) bernilai unik. Banyak kemunculan suatu nilai Key disimpan dalam field Count. type infotype : < Key :..., { terdefinisi } Count : integer > type Node : < Info : infotype, Left : BinTree, Right : BinTree > type BinTree : address { Selektor : Jika P adalah BinTree, Key(P) akses bagian P.Info.Key Count(P) akses bagian P.Info.Count Left(P) akses bagian P.Left Right(P) akses bagian P.Right } 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 7

Insert Node dalam BST procedure InsSearchTree (input X : infotype, input/output P : BinTree) { Menambahkan sebuah node X ke pohon biner pencarian P } { infotype terdiri dari key dan count. Key menunjukkan nilai unik, dan Count berapa kali muncul } { Basis : Pohon kosong } { Rekurens : Jika pohon tidak kosong, insert ke anak kiri jika nilai < Key(P) } { Atau insert ke anak kanan jika nilai > Key(P) } { Perhatikan bahwa insert selalu menjadi daun terkiri/terkanan dari subpohon } { Asumsi: Alokasi selalu berhasil } KAMUS LOKAL ALGORITMA if (IsTreeEmpty(P)) then { Basis: buat hanya akar } MakeTree(X,Nil,Nil,P) else {Rekurens } depend on X, Key(P) X.Key = Key(P) : Count(P) Count(P) + 1 X.Key < Key(P) : InsSearchTree(X,Left(P)) X.Key > Key(P) : InsSearchTree(X,Right(P)) 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 8

Delete Simpul dalam BST - 1 procedure DelBTree (input/output P : BinTree, input X : infotype) { Menghapus simpul bernilai Key(P) = X } { infotype terdiri dari key dan count. Key menunjukkan nilai unik, dan Count berapa kali muncul } { Basis :? ; Rekurens :? } KAMUS LOKAL q : address procedure DelNode (input/output P : BinTree) { } ALGORITMA depend on X, Key(P) X.Key < Key(P) : DelBTree(Left(P),X) X.Key > Key(P) : DelBTree(Right(P),X) X.Key = Key(P) : { Delete simpul ini } q P if Right(q) = Nil then P Left(q) else if Left(q) = Nil then P Right(q) else DelNode(Left(q)) Dealokasi(q) 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 9

Delete Simpul dalam BST - 2 procedure DelNode (input/output P: BinTree) { I.S. P adalah pohon biner tidak kosong } { F.S. q berisi salinan nilai daun terkanan } { Proses : } { Memakai nilai q yang global} { Traversal sampai daun terkanan, copy nilai daun terkanan P, salin nilai ke q semula } { q adalah anak terkiri yang akan dihapus } KAMUS LOKAL ALGORITMA depend on P Right(P) Nil : DelNode(Right(P)) Right(P) = Nil : Key(q) Key(P) Count(q) Count(P) q P P Left(P) 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 10

10 10 5 15 5 15 3 8 13 18 3 8 18 DelBTree(P,13) 10 10 5 13 15 5 13 3 8 13 18 3 8 18 DelBTree(P,15) 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 11

10 10 53 15 3 15 3 8 18 8 18 DelBTree(P,5) 10 8 8 5 15 5 15 3 8 13 18 3 13 18 DelBTree(P,10) 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 12

Membentuk Pohon Biner dari Pita Karakter Ekspresi pohon dalam bentuk linier (list) dapat dituliskan dalam sebuah pita karakter Ada 2 ide: Membangun pohon secara iteratif Membangun pohon secara rekursif 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 13

Contoh - 1 (A()()) (A(B()())(C()())) (A(B()())()) 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 14

Contoh - 2 (A(B(C(D()())(E()()))(F(G(H(I()())(J()())) (K()()) ()) 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 15

Ide 1 : Membangun Pohon secara Iteratif Karena pembacaan pita dilakukan secara sekuensial, pembentukan pohon selalu dimulai dari akar Pembacaan karakter demi karakter dilakukan secara iteratif, untuk membentuk sebuah pohon, selalu dilakukan insert terhadap daun Struktur data memerlukan pointer ke Bapak, dengan demikian yang dipakai adalah: type Node: < Parent : address, Left : address, Info : character, Right : address > 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 16

Ide Algoritma Membangun Pohon Ada tiga kelompok karakter: Karakter berupa abjad, menandakan bahwa sebuah node harus dibentuk, entah sebagai anak kiri atau anak kanan. Karakter berupa ( menandakan suatu sub pohon baru. Jika karakter sebelumnya adalah ) maka siap untuk melakukan insert sub pohon kanan. Jika karakter sebelumnya adalah abjad, maka siap untuk melakukan insert sub pohon kiri. Karakter berupa ) adalah penutup sebuah pohon, untuk kembali ke Bapaknya, berarti naik levelnya dan tidak melakukan apaapa, tetapi menentukan proses karakter berikutnya. Tidak cukup dengan mesin karakter (hanya CC), sebab untuk memproses sebuah karakter, dibutuhkan informasi karakter sebelumnya karena itu digunakan mesin couple (C1, CC) 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 17

#include <stdlib.h> #include "boolean.h" #include "mesincouple.h" Implementasi dalam Bahasa C File : tree.h typedef char infotype; #define Nil NULL /*** Selektor ****/ #define Info(P) (P)->Info #define Left(P) (P)->Left #define Right(P) (P)->Right #define Parent(P) (P)->Parent /*** Type Tree ***/ typedef struct telmttree *address; typedef struct telmttree { infotype Info; address Left; address Right; address Parent; } ElmtTree; typedef address Tree; 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 18

Implementasi dalam Bahasa C File : tree.h void Alokasi (address *P, infotype X); /* I.S. sembarang */ /* F.S. address P dialokasi, dan bernilai tidak Nil jika berhasil */ /* Alokasi sebuah address P */ void MakeTree(Tree *T); /* I.S. Sembarang */ /* F.S. T terdefinisi */ /* Proses : Membaca isi pita karakter dan membangun pohon dilakukan secara iteratif. Pita karakter mungkin kosong. */ void PrintTree (Tree T); /* I.S. T terdefinisi */ /* F.S. T tertulis di layar */ 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 19

void MakeTree (Tree *T) { /* Kamus Lokal */ address CurrParent; address Ptr; int level = 0; boolean InsKi; /* Algoritma */ START_COUPLE(); CurrParent = Nil; while (!EOP()) { switch (CC) { case '(' : level++; InsKi = C1!= ')'; break; case ')' : level--; if (C1!= '(') { CurrParent = Parent(CurrParent); } break; default : Alokasi (&Ptr,CC); if (CurrParent!= Nil) { if (InsKi) { Left(CurrParent) = Ptr; } else { Right(CurrParent) = Ptr; } } else { *T = Ptr; } Parent(Ptr) = CurrParent; CurrParent = Ptr; break; } ADV_COUPLE(); 12/10/2009 } FNA/IF2030/Sem. 1 2008-2009 20 } Implementasi dalam Bahasa C File : tree.c Prosedur MakeTree Asumsi tambahan: pitakarakter mungkin kosong

Ide 2 : Membangun Pohon Secara Struktur data yang digunakan adalah tree biasa (tidak memerlukan pointer ke Bapak) Rekursif - 1 typedef struct telmttree *address; typedef struct telmttree { infotype Info; address Left; address Right; } ElmtTree; typedef address Tree; Hanya memerlukan modul mesin karakter untuk membaca pita karakter void BuildTree(Tree *T) /* Dipakai jika input dari pita karakter */ /* I.S.: Sembarang */ /* F.S.: T terdefinisi */ /* Proses : Membaca isi pita karakter dan membangun pohon secara rekursif */ 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 21

Ide 2 : Membangun Pohon secara Rekursif - 2 void BuildTree(Tree *T) /* Dipakai jika input dari pita karakter */ /* I.S. Sembarang */ /* F.S. T terdefinisi */ /* Proses : Membaca isi pita karakter dan membangun pohon secara rekursif, hanya membutuhkan mesin karakter */ { /* Kamus Lokal */ } /* Algoritma */ ADV(); /* advance */ if (CC==')') /* Basis : pohon kosong */ (*T)=Nil; else { /* Rekurens */ Alokasi(T,CC); ADV(); /* advance */ BuildTree(&(Left(*T))); BuildTree(&(Right(*T))); } ADV(); /* advance */ 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 22

Ide 2 : Membangun Pohon secara Rekursif - 3 Contoh pemanggilan di program utama: #include "tree.h" int main () { /* KAMUS */ Tree T; } /* ALGORITMA */ START(); BuildTree(&T); PrintTree(T); /* mencetak pohon */ return 0; 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 23

Membangun Pohon dari String - 1 Menggunakan ide pembangunan pohon dari pita karakter secara rekursif Struktur data yang digunakan adalah struktur data pohon biasa (tidak perlu pointer ke Bapak) void BuildTreeFromString (Tree *T, char *st, int *idx) /* Input dari string st */ /* I.S. Sembarang */ /* F.S. T terdefinisi */ /* Proses : Membaca string st dan membangun pohon secara rekursif */ 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 24

Membangun Pohon dari String - 2 void BuildTreeFromString (Tree *T, char *st, int *idx) /* Input dari string st */ /* I.S. Sembarang */ /* F.S. T terdefinisi */ /* Proses : Membaca string st dan membangun pohon secara rekursif */ { /* Kamus Lokal */ /* Algoritma */ (*idx)++; /* advance */ if (st[*idx]==')') /* Basis : pohon kosong */ (*T)=Nil; else { /* Rekurens */ Alokasi(T,st[*idx]); (*idx)++; /* advance */ BuildTreeFromString(&Left(*T),st,idx); BuildTreeFromString(&Right(*T),st,idx); } (*idx)++; /* advance */ } 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 25

Membangun Pohon dari String - 3 Contoh pemanggilan di program utama: #include "tree.h" int main () { /* KAMUS */ Tree T; char *S = "(A()())"; int idx = 0; } /* ALGORITMA */ BuildTreeFromString(&T,S,&idx); PrintTree(T); /* mencetak pohon */ return 0; 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 26

PR Melanjutkan modul P-15. ADT Pohon Biner untuk fungsi/prosedur yang terkait: Pohon seimbang Pohon biner terurut Pembangunan pohon dari pita karakter/string 12/10/2009 FNA/IF2030/Sem. 1 2008-2009 27