Syarif Abdullah (G )

dokumen-dokumen yang mirip
DIKTAT KULIAH ALGORITMA dan STRUKTUR DATA II

MODUL PRAKTIKUM STRUKTUR DATA

ALGORITMA DAN STRUKTUR DATA

BAB IX TREE (POHON) ISTILAH DASAR

A B C E F G K Contoh Tree

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

Algoritma dan Struktur Data. Click to edit Master subtitle style Konsep Tree

Pertemuan 9 STRUKTUR POHON & KUNJUNGAN POHON BINER

Tree (Struktur Data) Nisa ul Hafidhoh, MT

IT234 Algoritma dan Struktur Data. Tree

STRUKTUR POHON & KUNJUNGAN POHON BINER

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

Ringkasan mengenai Tree (Dari beberapa referensi lain) Nina Valentika

BAB XI Manipulasi Binary Tree

Pohon dan Pohon Biner

Laporan Praktikum 14 Metode Komputasi Matematika (Latihan Bab 3 dari Buku J. Leon Aljabar Linear) Program Scilab

Soal Pendahuluan Modul 3

Struktur Data Tree/Pohon dalam Bahasa Java

Algoritma dan Struktur Data. Tree

Tree. Perhatikan pula contoh tree di bawah ini : Level. Level 2. Level 3. Level 4. Level 5

TREE. Definisi. Istilah-istilah Umum dalam Tree

TREE STRUCTURE (Struktur Pohon)

Binary Tree kosong Gambar 1. Binary Tree dalam kondisi kosong

Algoritma dan Struktur Data. Linear & Binary Search Tree

JAWABAN TUGAS MATRIKULASI STRUKTUR DATA. DOSEN Bpk. Krisna Adiyarta, M.Sc

MODUL PRAKTIKUM STRUKTUR DATA

BAB IV POHON. Diktat Algoritma dan Struktur Data 2

Tenia Wahyuningrum, S.Kom. MT Sisilia Thya Safitri, S.T.,M.T.

13/12/2013. Binary Tree. Contoh Tree

BINARY SEARCH TREE. TUJUAN UMUM Mahasiswa memahami binary search Tree

2. Mahasiswa dapat membuat dan menggunakan array dan linked list dalam suatu kasus.

Lecture Notes On Algorithms and Data Structures. Oleh Thompson Susabda Ngoen

METODE AVL TREE UNTUK PENYEIMBANGAN TINGGI BINARY TREE

STRUKTUR DATA. By : Sri Rezeki Candra Nursari 2 SKS

Struktur Data & Algoritma

ANALISIS ALGORITMA BINARY SEARCH

KUM 6 IMPLEMENTASI BINARY TREE

Pohon (Tree) Universitas Gunadarma Sistem Informasi 2012/2013

6. TREE / BINARY TREE

Struktur Data dan Algoritma

Outline. Struktur Data & Algoritme (Data Structures & Algorithms) Pengantar. Definisi. 2-3 Trees

Struktur Data & Algoritma

B C D E F G H I J K L M N O P Q R S T. Tinaliah, S.Kom POHON BINER

BAB VII POHON BINAR POHON

Laporan Praktikum 5 Analisis Numerik

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

Laporan Praktikum 7 Analisis Numerik

SATUAN ACARA PERKULIAHAN (SAP) Mata Kuliah : Struktur Data Kode : TIS3213 Semester : III Waktu : 2 x 3 x 50 Menit Pertemuan : 10 & 11

Silsilah keluarga Hasil pertandingan yang berbentuk turnamen Struktur organisasi dari sebuah perusahaan. B.1 Pohon Biner (Binary Tree)

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

Pemodelan dan Pengelolaan Data Klasifikasi Tanaman Menggunakan Pohon

Buku Ajar Struktur Data

Pemrograman Algoritma Dan Struktur Data

DEFINISI. Pohon adalah graf tak-berarah terhubung yang tidak mengandung sirkuit. pohon pohon bukan pohon bukan pohon 2

FAKULTAS TEKNOLOGI KOMUNIKASI DAN INFORMATIKA UNIVERSITAS NASIONAL

Algoritma Pemrograman & Struktur Data

Termilogi Pada Pohon Berakar 10 Pohon Berakar Terurut

Masukan Judul... Infotype àsebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list

Organisasi Berkas Sekuensial Berindeks

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

Laporan Praktikum 12 Analisis Numerik

MAKALAH DESAIN DAN ANALISIS ALGORITMA BINARY TREE DISUSUN OLEH : 1. Nadim Achmad ( ) 2. Dzurratul Ulya ( )

Pohon Biner (Bagian 1)

Variasi Pohon Pencarian Biner Seimbang

: Mahasiswa mampu menjelaskan teknik pemrograman menggunakan Linked List. Single Linked List

Pohon. Bahan Kuliah IF2120 Matematika Diskrit. Program Studi Teknik Informatika ITB. Rinaldi M/IF2120 Matdis 1

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

Implementasi Skema Pohon Biner yang Persistent dalam Pemrograman Fungsional

Laporan Praktikum 10 Analisis Numerik

Penerapan Pohon Untuk Memanipulasi dan Meritrieve Data

BAB VII Tujuan 7.1 Deskripsi dari Binary Tree

Praktikum Algoritma dan Setruktur Data

Politeknik Elektronika Negeri Surabaya

Algoritma dan Struktur Data. Pertemuan 8 Doubly Linked List

Laporan Praktikum 14 (5) ( ) Metode Komputasi Matematika. Penyelesaian Soal UAS Metode Komputasi Syarif Abdullah (G )

TUGAS MAKALAH INDIVIDUAL. Mata Kuliah : Matematika Diskrit / IF2153 Nama : Dwitiyo Abhirama NIM :

Pohon (TREE) Matematika Deskrit. Hasanuddin Sirait, MT 1

Pohon Biner dan Aplikasinya

Matematika Diskret (Pohon) Instruktur : Ferry Wahyu Wibowo, S.Si., M.Cs.

Kecerdasan Buatan. Penyelesaian Masalah dengan Pencarian... Pertemuan 02. Husni

Definisi. Pohon adalah graf tak-berarah, terhubung, dan tidak mengandung sirkuit. pohon pohon bukan pohon bukan pohon (ada sikuit) (tdk terhubung)

Politeknik Elektronika Negeri Surabaya

Penerapan BFS dan DFS dalam Garbage Collection

Laporan Praktikum 9 Analisis Numerik

IKI 20100: Struktur Data & Algoritma

OPERASI LOGIKA PADA GENERAL TREE MENGGUNAKAN FUNGSI REKURSIF

HEAP. Heap dan Operasinya. Oleh Andri Heryandi

Algoritma dan Struktur Data. Pertemuan 9 Circular Linked List

A. TUJUAN Mahasiswa diharapkan mampu : 1. Memahami Konsep Binary Search Tree 2. Mengimplementasaikan Binary Search Tree

DIG1G3 Implementasi Struktur Data

STRUKTUR DATA. Literatur

MODUL 6 SINGLE & DOUBLE LINKED LIST

Kecerdasan Buatan Penyelesaian Masalah dengan Pencarian

Definisi. Pohon adalah graf tak-berarah terhubung yang tidak mengandung sirkuit. pohon pohon bukan pohon bukan pohon

Binary Search Tree (BST)

Koleksi Hirarkis Tree

Red-Black Tree Deletion. Rules for BST Deletion. Tujuan Top-Down Deletion. Terminology. Men-delete X dari BST: Men-delete X dari RB Trees: No problem

Membuat Binary Search Tree Menggunakan STL Vector C++

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

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

Transkripsi:

Trees, Binary Trees dan Binary Search Trees Syarif Abdullah (G551150381) Matematika Terapan Departemen Matematika FMIPA IPB e-mail: syarif abdullah@apps.ipb.ac.id & arjunaganteng71@gmail.com 17 Januari 2016 Deskripsi: Merangkum catatan kuliah Metode Komputasi pada tanggal 23 Desember 2015 yaitu tentang Binary Search Trees. Selain itu penulis juga menambahkan beberapa materi untuk melengkapi catatan dengan mengambil dan mempelajari dari beberapa artikel dan buku. Pembahasan: Trees, Binary Trees dan Binary Search Trees Pre-Order In-Order dan Post-Order pada Trees Binary Search Tree Insert Binary Search Trees dan Algoritmanya Delete Binary Search Trees dan Algoritmanya Balance Tree Single Rotation dan Double Rotations Aplikasi Tree dengan Program Scilab Trees, Binary Trees dan Binary Search Trees Definisi Tree Tree merupakan salah satu bentuk struktur data tidak linear yang menggambarkan hubungan yang bersifat hierarkis (hubungan one to many) antara elemen-elemen. Tree bias didefinisikan sebagai kumpulan simpul/node dengan elemen khusus yang disebut Root. Node lainnya terbagi menjadi himpunan-himpunan yang saling tak berhubungan satu sama lain (disebut Subtree). Untuk lebih jelasnya, di bawah akan diuraikan istilahistilah umum dalam tree. Predecessor : Node yang berada di atas node tertentu Successor : Node yang berada dibawah node tertentu Ancestor : Seluruh node yang terletak sebelum node tertentu dan terletak pada jalur yang sama Descendant : Seluruh node yang terletak sesudah node tertentu dan terletak pada jalur yang sama Parent : Predecessor satu level di atas suatu node Child : Successor satu level di bawah suatu node Sibling : Node-node yang memiliki parent yang sama dengan suatu node Subtree : Bagian dari tree yang berupa suatu node beserta descendantnya dan memiliki semua karakteristik dari tree tersebut. Size : Banyaknya node dalam suatu tree Height : Banyaknya tingkatan / level dalam suatu tree Root : Satu-satunya node khusus dalam tree yang tak punyak predecessor Leaf : Node-node dalam tree yang tak memiliki successor Degree : Banyaknya child yang dimiliki suatu node http ://syarif abdullah.student.ipb.ac.id/ File dibuat dengan LYX Program 1

Binary Tree Binary Tree adalah tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah. Sesuai dengan definisi tersebut tiap node dalam binary tree hanya boleh memiliki paling banyak dua child. Berikut adalah contoh dari Tree: Struktur Data Dasar Tree Ancestor (f) : c, a Descendant (c) : f, g Parent (d) : b Child (a) : b, c Sibling (f) : g Size : 7 Height : 3 Root : a Leaf : d, e, f, g Gambar 1 : Tree Degree (c) : 2 Struktur Data Aktual Tree Gambar 2: Struktur Data Dasar Tree Jenis- Jenis Binary Tree : Gambar 3: Struktur Data Aktual Tree Full Binary Tree : Jenis binary tree ini tiap nodenya (kecuali leaf) memiliki dua child dan tiap subtree harus mempunyai panjang path yang sama. Complete Binary Tree : Jenis ini mirip dengan Full Binary Tree, namun tiap subtree boleh memiliki panjang path yang berbeda dan setiap node kecuali leaf hanya boleh memiliki 2 child. 2

Skewed Binary Tree : Skewed Binary Tree adalah Binary Tree yang semua nodenya (kecuali leaf) hanya memiliki satu child. Operasi-operasi pada Binary Tree Create : Membentuk binary tree baru yang masih kosong Clear : Mengosongkan binary tree yang sudah ada Empty : Function untuk memeriksa apakah binary tree masih kosong Insert : Memasukkan sebuah node ke dalam tree. Ada tiga pilihan insert : sebagai root, left child, atau right child. Khusus insert sebagai root, tree harus dalam keadaan kosong Find : Mencari root, parent, left child, atau right child dari suatu node. kosong). (tree tidak boleh Update : Mengubah isi dari node yang ditunjuk oleh pointer curret (Tree tidak boleh kosong) Retrieve : Mengetahui isi dari node yang ditunjuk oleh pointer current (Tree tidak boleh kosong) DeleteSub : Menghapus sebuah subtree (node beserta seluruh descendantnya) yang ditunjuk current. Tree tidak boleh kosong. Setelah itu, pointer current dakan berpindah ke parent dari node yang dihapus. Characteristic : Mengetahui karakteristik dari suatu tree, yakni: size, height, serta average length. Tree tidak boleh kosong. Traverse : Mengunjungi seluruh node-node pada tree, masing-masing sekali. Hasilnya adalah urutan informasi secara linear yang tersimpan dalam tree. Ada tiga cara traverse,yaitu PreOrder, InOrder, dan PostOrder. Pre-Order In-Order dan Post-Order pada Trees Langkah-langkah Tranverse : PreOrder : cetak isi node yang dikunjungi, kunjungi Left Child, kunjungi Right Child. In- Order : kunjungi Left Child, cetak isi node yang dikunjungi, kunjungi Right Child. PostOrder : kunjungi Left Child, kunjungi Right Child cetak isi node yang dikunjungi. Algoritma Menentukan Transversal pada Pre-Order dalam bahasa Pascal adalah sebagai berikut: PROCEDURE preorder(t: Node); BEGIN IF t # NIL THEN P(t); preorder(t.left); preorder(t.right) END END preorder Algoritma Menentukan Transversal pada In-Order dalam bahasa Pascal adalah sebagai berikut: PROCEDURE inorder(t: Node); BEGIN IF t # NIL THEN inorder(t.left); P(t); 3

inorder(t.right) END END inorder Algoritma Menentukan Transversal pada Post-Order dalam bahasa Pascal adalah sebagai berikut: PROCEDURE postorder(t: Node); BEGIN IF t # NIL THEN postorder(t.left); postorder(t.right); P(t) END END postorder Algoritma Menentukan Transversal pada Pre-Order dalam bahasa C adalah sebagai berikut: preorder(node * n){ node * c; if (! n==null){ DO SOMETHING; c = n->first child; while (! c==null){ preorder(c); c = c->next sibling; Sedangkan Algoritma Menentukan Transversal pada Post-Order adalah sebagai berikut: postorder(node * n){ node * c; if (! n==null){ c = n->first child; while (! c==null){ postorder(c); c = c->next sibling; DO SOMETHING; Contoh Transversal: 4

Gambar 4: Transversal Pada Contoh di atas didapatkan Pre-Order Transversalnya adalah : * + a / b c - d * e f Pada Contoh di atas didapatkan Pre-Order Transversalnya adalah : a + b / c * d - e * f Pada Contoh di atas didapatkan Pre-Order Transversalnya adalah : a b c / + d e f * - * Algoritma Menentukan Depth (kedalaman) pada Tree dalam bahasa C adalah sebagai berikut: Depth(node * n, int d){ node * c; if (! n==null){ n->depth = d; d = d+1; c = n->first child; while (! c==null){ Depth(c, d); c = c->next sibling; Algoritma Menentukan Size (ukuran) pada Tree dalam bahasa C adalah sebagai berikut: Size(node * n){ node * c; if (! n==null) return 0; else { int m=1; c = n->first child; while (! c==null){ m = m + Size(c); c = c->next sibling; return m; Algoritma Mencetak/Print Tree dalam bahasa C adalah sebagai berikut: print(node * root){ node * n, c; queue Q; Q.enqueue(root); while (! Q.empty()){ n = Q.dequeue(); print n->data; c = n->first child; while (! c==null){ Q.enqueue(c); c = c->next sibling; Binary Search Tree Binary Tree ini memiliki sifat dimana semua left child harus lebih kecil dari pada right child dan parentnya. Semua right child juga harus lebih besar dari left child serta parentnya. Binary search tree dibuat untuk mengatasi kelemahan pada binary tree biasa, yaitu kesulitan dalam searching / pendarian node tertentu dalam binary tree. Pada dasarnya operasi dalam Binary Search Tree sama dengan Binary Tree biasa, kecuali pada operasi insert, update, dan delete. Berikut adalah contoh dari Binary Search Tree dan bukan. 5

Gambar 5a : Binary Search Tree Gambar 5b : Bukan Binary Search Tree Pada Gambar 5a di atas merupakan Binary Search Tree karena setiap none memiliki maksimal 2 node, sedangkan pada Gambar 5b di atas bukan merupakan Binary Search Tree karena pada node 5 mempunyai banyak cabang/tangan lebih dari 2. Contoh In-Order Listing pada Binary Search Tree: Gambar 6 : In-Order Binary Search Tree Dari Gambar 6 didapatkan In-Order Binary Search Tree adalah: 2 5 7 9 10 15 17 20 30 Berikuta adalah Algoritma pencarian node dengan bahasa C Node *& find(comparable x, Node * root) { if (root == NULL) return root; else if (x < root->key) return find(x, root->left); else if (x > root->key) else return find(x, root->right); return root; Insert Binary Search Trees dan Algoritmanya Memasukkan sebuah node ke dalam tree. Ada tiga pilihan insert : sebagai root, left child, atau right child. Khusus insert sebagai root, tree harus dalam keadaan kosong. 6

Berikut adalah Algoritma insert node dengan bahasa C void insert(comparable x, Node * root) { assert ( root!= NULL ); if (x < root->key){ if (root->left == NULL) root->left = new Node(x); else insert( x, root->left ); else if (x > root->key){ if (root->right == NULL) root->right = new Node(x); else insert( x, root->right ); Contoh : akan dimasukkan node-node sebagai berikut, 1; 2; 3; 4; 5; 6; 7; 8; 9 dengan urutan 5; 3; 7; 2; 4; 6; 8; 1; 9 Gambar 7a : Insert Binary Search Tree Awal Gambar 7b : Insert Binary Search Tree Akhir Delete Binary Search Trees dan Algoritmanya Menghapus sebuah subtree (node beserta seluruh descendantnya) yang ditunjuk current. Tree tidak boleh kosong. Setelah itu, pointer current dakan berpindah ke parent dari node yang dihapus. Namun kita juga dapat menghapus hanya satu node saja pada sebuah trees. Sebelum kita meghapus suatu node, kita harus mengetahui dan dapat menentukan Predecessor dan Succesor. Predecessor adalah node yang berada di atas node tertentu, dan Succesor adalah node yang berada dibawah node tertentu. Berikut adalah algoritma-algoritmanya: Berikut adalah Algoritma Menemukan Succesor node dengan bahasa C Node * succ(node * root) { if (root->right == NULL) else return NULL; return min(root->right); Berikut adalah Algoritma Menemukan Predecessor node dengan bahasa C Node * pred(node * root) { if (root->left == NULL) else return NULL; 7

return max(root->left); Berikut adalah Algoritma delete node dengan bahasa C void delete(comparable x, Node *& p) { Node * q; if (p!= NULL) { if (p->key < x) delete(x, p->right); else if (p->key > x) delete(x, p->left); else { /* p->key == x */ if (p->left == NULL) p = p->right; else if (p->right == NULL) p = p->left; else { q = successor(p); p->key = q->key; delete(q->key, p->right); Berikut adalah contoh delete node pada suatu tree yang paling sederhana. Gambar 8a : Delete Node 17 Gambar 8b : Hasil Delete Node 17 Pada Contoh di atas jika kita menghapus node 17 maka penghapusan ini tergolong sangat sederhana karena kita tinggal menghapus node tanpa mencari succecor atau Predesessornya. Berikut adalah contoh delete node pada suatu tree yang paling tidak sederhana. 8

Gambar 9a : Delete Node 15 Gambar 9b : Hasil Delete Node 15 Pada Contoh di atas jika kita menghapus node 15 maka penghapusan ini tergolong tidak sederhana. Sehingga kita gantikan Node 15 dengan menaikkan Node 20. Selanjutnya kita akan menghapus node 5: Gambar 10b : Delete Node 5 Gambar 10b : Hasil Delete Node 5 Pada Contoh di atas jika kita menghapus node 5 maka penghapusan ini tergolong tidak sederhana. Sehingga kita gantikan Node 5 dengan menaikkan Node 7. Sebenarnya pada langkah penghapusan node 15 dan node 5 di atas kita telah melakukan pencarian Succesor dan Predecessor sebagai berikut: 9

Gambar 11a : Pencarian Succesor Gambar 11b : Pencarian Predesessor Gambar 11c : Hasil Delete Node 15 dan 5 Balance Tree Single Rotation dan Double Rotations Suatu Tree dikatakan balance(seimbang) jika perbedaan/selisih high sebelah kanan dan kiri antara -1 dan 1. Gambar 12 : Balance Tree Ada beberapa kasus insert node dan delete node untuk menjadikan tree tersebut tetap balance. Sehingga dibutuhkan suatu rotasi untuk mendapatkan tree tersebut tetap balance apabila dilakukan insert maupun delete node. Kasus 1 dengan menggunakan Single Rotation Bila didapatkan insert atau delete node sehingga didapatkan bentuk node seperti berikut: 10

Gambar 13 : Single Rotation Kasus 2 dengan menggunakan Double Rotation Bila didapatkan insert atau delete node sehingga didapatkan bentuk node seperti berikut: Contoh: Gambar 14 : Double Rotations Misalkan kita akan melakukan insert node 18 pada tree berikut: Gambar 15 : Insert Balance Binary Tree Dengan menggunakan Single Rotation maka didapatkan, Gambar 16 : Insert Single Rotation Dengan menggunakan Double Rotation maka didapatkan, 11

Gambar 17a : Insert Double Rotation 1 Aplikasi Tree dengan Program Scilab Gambar 17b : Insert Double Rotation 1 Berikut adalah beberapa perinah untuk membuat suatu Tree pada Program Scilab yang telah dibuat oleh penulis dan menampilkannya. root = uicreatenode( Ayis, iconayis, callbackayis ); node1 = uicreatenode( Bono, iconnode1, callbacknode1 ); leaf11 = uicreatenode( Dono, iconleaf1.1, callbackleaf1.1 ); leaf12 = uicreatenode( Eni, iconleaf1.2, callbackleaf1.2 ); node2 = uicreatenode( Cinta, iconnode2, callbacknode2 ); leaf21 = uicreatenode( Fitay, iconleaf2.1, callbackleaf2.1 ); leaf22 = uicreatenode( Gino, iconleaf2.2, callbackleaf2.2 ); treenode1 = uicreatetree(node1, leaf11, leaf12); treenode2 = uicreatetree(node2, leaf21, leaf22); treeayis = uicreatetree(root, treenode1, treenode2); uidisplaytree(treeayis) // Membuat node baru mynode = uicreatenode( Cinta, iconnode2, callbacknode2 ) // Menemukan node jika treeayis memuat mynode result = uifindnode(treeayis, mynode) //akan menghasilkan result = list(node1) // Menemukan node pada posisi 1.1 result = uifindnode(treeayis, 3.1 ) 12

//akan menghasilkan result = list(leaf31) //Menemukan node dimana text sama dengan Cinta result = uifindnode(treeayis, label, Cinta ) //akan menghasilkan result = list(node2) Gambar 18 : Tree/Binary Tree pada Program Scilab Sekian Pembahasan kali ini. Kurang lebihnya mohon maaf. Semoga Bermanfaat. Amin. Profile: Nama : Syarif Abdullah Tmpt/Tgl Lahir : Gresik, 26 Januari 1986 Alamat : Leran Manyar Gresik Jawa Timur NRP : G551150381 Jurusan : Matematika Terapan Departement : Matematika Fakultas : Matematika dan Ilmu Pengetahuan Alam Universitas : Institut Pertanian Bogor Hobby : Baca buku dan utek-utek soal E-mail : syarif abdullah@apps.ipb.ac.id Web/Blog : http ://syarif abdullah.student.ipb.ac.id/ 13