18
MAKALAH DESAIN DAN ANALISIS ALGORITMA “BINARY TREE” DISUSUN OLEH : 1. Nadim Achmad (105060 807111009) 2. Dzurratul Ulya (105060807111120) 3. Safer Yusuf (105060803111004 ) PROGRAM TEKNOLOGI INFORMASI DAN ILMU KOMPUTER UNIVERSITAS BRAWIJAYA

Makalah Binary Tree

Embed Size (px)

DESCRIPTION

tree

Citation preview

Page 1: Makalah Binary Tree

MAKALAH DESAIN DAN ANALISIS ALGORITMA

“BINARY TREE”

DISUSUN OLEH :

1. Nadim Achmad (105060 807111009)

2. Dzurratul Ulya (105060807111120)

3. Safer Yusuf (105060803111004 )

PROGRAM TEKNOLOGI INFORMASI DAN ILMU KOMPUTER

UNIVERSITAS BRAWIJAYA

Page 2: Makalah Binary Tree

KATA PENGANTAR

Puji Syukur kami panjatkan kehadirat Allah SWT karena berkat limpahan rahmat

dari-NYA kami selaku kelompok I dapat menyelesaikan makalah ini tepat pada

waktunya,walaupun dalam keadaan yang sangat sederhana.

Makalah ini berisikan tidak lanjut dari materi pembelajaran kita yang berjudul

“Binary Tree” .

Dengan segala keterbatasan yang kami miliki kami sajikan makalah ini dalam bentuk

yang sangat sederhana maka dari itu kami selaku panyaji minta maaf yang sebesar-besarnya

jika makalah ini masih begitu banyak kekurangan, baik itu yang kami sengaja ataupun tidak

karena ini senua masih dalam proses pembelajaran kami yang tentunya tak lepas dari kodrad

kami sebagai manusia biasa yang tak akan pernah luput dari kesalahan.

Malang, 20 Mei 2012

Kelompok I

Page 3: Makalah Binary Tree

BAB 1

PENDAHULUAN

1.1. Latar Belakang

Tree merupakan salah satu bentuk struktur data tidak linear yang menggambarkan

hubungan yang bersifat hirarkis (hubungan one to many) antara elemen-elemen. Tree

bisa didefinisikan sebagai kumpulan simpul/node dengan satu elemen khusus yang

disebut Root dan node lainnya terbagi menjadi himpunan-himpeunan yang saling tak

berhubungan satu sama lainnya (disebut subtree).Tree juga adalah suatu graph yang

acyclic, simple, connected yang tidak mengandung loop.

Sebuah binary search tree (bst) adalah sebuah pohon biner yang boleh kosong,

dan setiap nodenya harus memiliki identifier/value. value pada semua node subpohon

sebelah kiri adalah selalu lebih kecil dari value dari root, sedangkan value subpohon di

sebelah kanan adalah sama atau lebih besar dari value pada root, masing – masing

subpohon tersebut (kiri&kanan) itu sendiri adalah juga bst.

Struktur data bst sangat penting dalam struktur pencarian, misalkan, dalam kasus

pencarian dalam sebuah list, jika list sudah dalam keadaan terurut maka proses

pencarian akan sangat cepat, jika kita menggunanan list contigue dan melakukan

pencarian biner. akan tetapi, jika kita ingin melakukan perubahan isi list (insert atau

delete), menggunakan list contigue akan sangat lambat, karena proses insert dan delete

dalam list contigue butuh memindahkan banyak elemen setiap saat. mungkin kita bisa

juga menggunakan linked-list, yang untuk operasi insert atau delete tinggal mengatur –

atur pointer, akan tetapi pada n-linked list, kita tidak bisa melakukan pointer

sembarangan setiap saat, kecuali hanya satu kali dengan kata lain hanya secara

sequential.

1.2 Permasalahan

Pengertian Binary Tree

Binary tree merupakan salah satu bentuk struktur data tidak linear yang

menggambarkan hubungan yang bersifat hirarkis (hubungan one to many) antara

elemen-elemen. Tree bisa didefinisikan sebagai kumpulan simpul/node dengan satu

elemen khusus yang disebut Root dan node lainnya terbagi menjadi himpunan-

himpunan yang saling tak berhubungan satu sama lainnya (disebut subtree).

Dalam tree terdapat jenis-jenis tree yang memiliki sifat khusus, diantaranya adalah

binary tree.

Binary Tree adalah Suatu tree dengan syarat bahwa tiap node (simpul) hanya

boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah. Tiap

node dalam binary tree hanya boleh memiliki paling banyak dua child (anak simpul),

Secara khusus anaknya dinamakan kiri dan kanan.

Page 4: Makalah Binary Tree

A

B

A

B C D

E F

A

B C

D

A

B

A

B

Binary Tree merupakan himpunan vertex-vertex yang terdiri dari 2 subtree

(dengan disjoint) yaitu subtree kiri dan subtree kanan. Setiap vertex dalam binary tree

mempunyai derajat keluar max = 2.

Contoh :

(1) (2) (3)

Derajat keluar = 2 A adalah subtree kanan A adalah subtree kiri

(4) (5)

Bukan Binary Tree tapi Bukan Binary Tree tapi General Tree

General Tree karena bukan karena mempunyai derajat keluar > 2.

Sebuah pohon biner adalah grafik asiklis yang terhubung dimana setiap tingkatan

dari sudut tidak lebih dari 3. Ini dapat ditunjukan bahwa dalam pohon biner manapun,

terdapat persis dua atau lebih simpul dengan tingkat satu daripada yang terdapat dengan

tingkat tiga, tetapi bisa terdapat angka apa saja dari simpul dengan tingkat dua. Sebuah

pohon biner berakar merupakan sebuah grafik yang mempunyai satu dari sudutnya

dengan tingkat tidak lebih dari dua sebagai akar.

Dengan akar yang dipilih, setiap sudut akan memiliki ayah khusus, dan diatas dua

anak; bagaimanapun juga, sejauh ini terdapat keterbatasan informasi untuk membedakan

antara anak kiri atau kanan. Jika kita membuang keperluan yg tak terkoneksi,

membolehkan bermacam koneksi dalam komponen di gafik, kita memanggil struktur

sebuah hutan.

Page 5: Makalah Binary Tree

Sebuah jalan lain untuk mendefinisikan pohon biner melalui definisi rekursif pada

grafik langsung. Sebuah pohon biner dapat berarti:

Sebuah sudut tunggal.

Sebuah graf yang dibentuk dengan mengambil dua pohon biner, menambahkan

sebuah sudut, dan menambahkan sebuah panah langsung dari sudut yang baru ke akar

daris setiap pohon biner.

Pohon biner dapat dikonstruksi dari bahasa pemrograman primitif dalam berbagai cara.

Dalam bahasa yang menggunakan records dan referensi, pohon biner secara khas

dikonstruksi dengan mengambil sebuah struktur simpul pohon yang memuat beberapa

data dan referensi ke anak kiri dan anak kanan.

Kadang-kadang itu juga memuat sebuah referensi ke ayahnya yang khas. JikA sebuah

simpul mempunyai kurang dari dua anak, beberapa penunjuk anak dapat diatur kedalam

nilai nol khusus, atau ke sebuah simpul sentinel.

Pohon biner dapat juga disimpan sebagai struktur data implisit dalam array, dan jika

pohon tersebut merupakan sebuah pohon biner lengkap, metode ini tidak boros tempat.

Dalam penyusunan yang rapat ini, jika sebuah simpul memiliki indeks i, anaknya dapat

ditemukan pada indeks ke-2i+1 dan 2i+2, meskipun ayahnya (jika ada) ditemukan pada

indeks lantai((i-1)/2) (asumsikan akarnya memiliki indeks kosong). Metode ini

menguntungkan dari banyak penyimpanan yang rapat dan memiliki referensi lokal yang

lebih baik, tersitimewa selama sebuah preorder traversal. Bagaimanapun juga, ini terlalu

mahal untuk perkembangannya dan boros tempat sebanding dengan 2h - n untuk sebuah

pohon dengan tinggi h dengan nsimpul.

Ini juga tidak menentukan susunan anak, tetapi memperbaiki akar tertentu.

Page 6: Makalah Binary Tree

Pada Binary Tree terdapat yang namanya simpul (node). Node pada binary tree

maksimum berjumlah 2n-1 dan jumlah maksimum pada setiap tingkat adalah 2

n

Tingkat ke-0, jumlah max=2’

Tingkat ke-1, jumlah max=2’

Tingkat ke-2, jumlah max=2’

Penghitungan jumlah node dalam tree dilakukan dengan cara mengunjungi setiap

node, dimulai dari root ke subtree kiri, kemudian ke subtree kanan dan masing-masing

node dicatat jumlahnya, dan terakhir jumlah node yang ada di subtree kiri dijumlahkan

dengan jumlah node yang ada di subtree kanan ditambah 1 yaitu node root.

Node root dalam sebuah tree adalah suatu node yang memiliki hiarki tertinggi

dan dapat juga memiliki node-node anak. Semua node dapat ditelusuri dari node root

tersebut. Node root adalah node khusus yang tercipta pertama kalinya. Node-node lain

di bawah node root saling terhubung satu sama lain dan disebut subtree. Contoh

penggunaan struktur pohon adalah pada silsilah keluarga, hasil pertandingan yang

berbentuk turnamen, struktur organisasi dari sebuah perusahaan

Jenis-Jenis Binary Tree

Pada binary tree terdapat tiga jenis atau bentuk binary tree, diantaranya yaitu:

1. Full Binary Tree yaitu semua node atau simpul (kecuali leaf) pasti memiliki 2 anak dan

tiap subtree memiliki panjang path yag sama.

2. Complete Binary Tree yaitu pada dasarnya mirip dengan full binary tree, tapi tiap subtree

boleh memiliki panjang path yang berbeda dan tiap node ((kecuali left ) memiliki 2 anak.

A

B C

E D G

F

A

B C

D F E G

Page 7: Makalah Binary Tree

3. Skewed Binary Tree yaitu binary tree yang semua nodenya (kecuali leaf) hanya memiliki

satu anak.

Operasi-Operasi pada Binary Tree

Pada binary terdapat beberapa operator yang digunakan di dalamnya, diantaranya

adalah:

1. Create, berguna untuk membentuk sebuah tree baru yang kosong.

pohon = NULL;

2. Search adalah tree yang terurut dimana aturannya Semua data dibagian kiri sub-

tree dari node t selalu lebih kecil dari data dalam node t itu sendiri dan semua data

dibagian kanan sub-tree dari node t selalu lebih besar atau sama dengan data

dalam node t.

3. Clear, berguna untuk menghapus semua elemen tree.

pohon = NULL;

4. Empty, berguna untuk mengetahui apakah tree kosong atau tidak

int isEmpty(Tree *pohon){

if(pohon == NULL) return 1;

else return 0;}

5. Insert, digunakan untuk menambah node ke dalam Tree secara rekursif. Jika data

yang akan dimasukkan lebih besar daripada elemen root, maka akan diletakkan di

node sebelah kanan, sebaliknya jika lebih kecil maka akan diletakkan di node

sebelah kiri. Untuk data pertama akan menjadi elemen root.

A

D

B

E

C

A

B

D

C

E

F

Page 8: Makalah Binary Tree

6. Find, digunakan untuk mencari node di dalam Tree secara rekursif sampai node

tersebut ditemukan dengan menggunakan variable bantuan ketemu. Syaratnya

adalah tree tidak boleh kosong.

7. Traverse yaitu operasi kunjungan terhadap node-node dalam pohon dimana

masing-masing node akan dikunjungi sekali.

8. Count, digunakan untuk menghitung jumlah node dalam Tree

9. Height, digunakan untuk mengetahui kedalaman sebuah Tree

10. Find Min dan Find Max, digunakan untuk mencari nilai terkecil dan terbesar

pada Tree

11. Child, digunakan untuk mengetahui anak dari sebuah node (jika punya)

Pada operator-operator yang bekerja pada binary tree terdapat beberapa operator yang

memilki pendefenisian secara khusus, diataranya yaitu search, create, insert, transverse

dan delete yang akan dibahas dalm makalah ini.

Binary Search Tree

Binary Search Tree adalah tree yang terurut (ordered Binary Tree). Aturan yang

harus dipenuhi untuk membangun sebuah BST adalah sebagai berikut:

1. Semua data dibagian kiri sub-tree dari node t selalu lebih kecil dari data dalam node t

itu sendiri.

2. Semua data dibagian kanan sub-tree dari node t selalu lebih besar atau sama dengan

data dalam node t.

Suatu binary search tree dari himpunan N record (N1, N2, N3 . . . Nn) adalah suatu

Binary Tree yang setiap vertex-nya (sebut Ri) ditempati oleh Ni untuk i=1,2,3 ... N.

Vertex-vertex dari Binary Tree tsb. diatur sedemikian rupa sehingga untuk setiap Ri harus

memenuhi syarat sbb :

1. Jika Rj = left (Ri) maka Nj < Ni

2. Jika Rj = right (Ri) maka Nj > Ni

Contoh :

Diketahui key dari 7 record (K, M, L, N, P, O, Q)

Binary Search Tree dari 7 key diatas dapat dibentuk :

K

M

L

K

N

M

Page 9: Makalah Binary Tree

Trnsversal dalam binary tree

Transversal dakam binary tree adalah proses menelusuri suatu Binary Tree

sehingga sedemikian rupa setiap vertex dikunjungi hanya 1 kali.

3 aktivitas dalam Binary tree Transversal :

1. Visit the Root

2. Transverse the left subtree

3. Transverse the right subtree

Beberapa macam pola penelusuran dalam Binary Tree Transversal :

1. Pre – Order-Transversal

Pre order Transversal adalah penelusuran yang dimulai dari semua simpul

induk kemudian melajutkan penelusuran pada anak simpul yang dimulai dari anak

simpul kiri kemudian anak simpul kanan.

2. In-Order-Transversal

In order transversal adalah penelusuran dimulai dari simpul anak disebelah kiri

kemudian penelusuran dilanjutkan pada simpul induk dan yang terakhir pada

simpul anak yang beradad di bagian kanan.

7

4 5

8

1

9 3 6

2

7

1 3

8

6

9 2 5

4

Page 10: Makalah Binary Tree

3. Post-Order-Transversal

Post Order Transversal adalah penelusuran dimulai dari simpul anak kiri

kemudian simpul anak kanan dan penelusuran terakhir ditujukan pada simpul

induk.

4. Level-Order-Transversal

Level Order Transversal adalah penelusuran dimulai dari tingkat ke i dan

dilanjutka pada tingkat ke ( i+1).

1.3 Tujuan

Adapun tujuan dari pembuatan makalah ini yaitu:

1. Untuk mengetahui defenisi dari Binary Tree

2. Untuk mengetahui bagaimana pembagian atau jenis-jenis Binary Tree

3. Untuk mengetahui Operator-operator apa saja yang bekerja di dalam Binary Tree.

8

1 2

6

9

7 3 4

5

3

8 9

6

1

7 4 5

5

2

Page 11: Makalah Binary Tree

BAB 2

TINJAUAN PUSTAKA

2.1 Konsep Algoritma

Konsep algoritma yang dipakai yaitu,

• Decrease and conquer: metode desain algoritma dengan mereduksi persoalan menjadi

beberapa sub-persoalan yang lebih kecil, tetapi selanjutnya hanya memproses satu

sub-persoalan saja.Berbeda dengan divide and conquer yang memproses semua sub-

persoalan dan menggabung semua solusi setiap sub-persoalan.

• Decrease and conquer terdiri dari dua tahapan:

1. Decrease: mereduksi persoalan menjadi beberapa persoalan yang lebih kecil (biasanya

dua sub-persoalan).

2. Conquer: memproses satu sub-persoalan secara rekursif. Tidak ada tahap combine

dalam decrease and conquer.

• Tiga varian decrease and conquer:

1. Decrease by a constant: ukuran instans persoalan direduksi sebesar konstanta yang

sama setiap iterasi algoritma. Biasanya konstanta = 1.

2. Decrease by a constant factor: ukuran instans persoalan direduksi sebesar faktor

konstanta yang sama setiap iterasi algoritma. Biasanya faktor konstanta = 2.

3. Decrease by a variable size: ukuran instans persoalan direduksi bervariasi pada setiap

iterasi algoritma.

Algoritma decrease and conquer:

1. Bagi himpunan koin menjadi dua sub-himpunan, masing-masing [n/2] koin. Jika n

ganjil, maka satu buah koin tidak dimasukkan ke dalam kedua sub-himpunan.

2. Timbang kedua sub-himpunan dengan neraca.

3. Jika beratnya sama, berarti satu koin yang tersisa adalah palsu.

4. Jika beratnya tidak sama, maka ulangi proses untuk sub-himpunan yang beratnya

lebih ringan (salah satu koin di dalamnya palsu).

Page 12: Makalah Binary Tree

Ukuran persoalan selalu berkurang dengan faktor setengah dari ukuran semula. Hanyasetengah bagian

yang diproses, setengah bagian yang lain tidak diproses.

Jumlah penimbangan yang dilakukan adalah:

0 ,n=1

T(n) =

1+T(n/2) ,n>1

Penyelesaian relasi rekurens T(n) mirip seperti binary search:

T(n) = 1 + T(n/2) = …. + O(2log n)

Page 13: Makalah Binary Tree

BAB 3

IMPLEMENTASI PROGAM

3.1 Implementasi Program Pada Binary Tree

Binary Tree dapat dibuat dengan menggunakan linked list secara rekursif dan

linked list yang digunakan adalah double linked list non circular. Dimana, data yang

pertama kali masuk akan menjadi node root.

Data yang lebih kecil dari data node root akan masuk dan menempati node kiri dari

node root, sedangkan jika lebih besar dari data node root, akan masuk dan menempati

node di sebelah kanan node root.

Page 14: Makalah Binary Tree

Contoh program seederhana dalam binary tree :

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

struct node

{

int data;

node *left;

node *right;

};

node *tree=NULL;

node *insert(node *tree,int ele);

void preorder(node *tree);

void inorder(node *tree);

void postorder(node *tree);

int count=1;

void main()

{

clrscr();

int ch,ele;

do

{

clrscr();

cout<<"\n\t\a\a1----INSERT A NODE IN A BINARY TREE.\a\a";

cout<<"\n\t\a\a2----PRE-ORDER TRAVERSAL.\a\a";

cout<<"\n\t\a\a3----IN-ORDER TRAVERSAL.\a\a";

cout<<"\n\t\a\a4----POST-ORDER TRAVERSAL.\a\a";

cout<<"\n\t\a\a5----EXIT.\a\a";

cout<<"\n\t\a\aENTER CHOICE::\a\a";

cin>>ch;

switch(ch)

{

case 1:

cout<<"\n\t\a\aENTER THE ELEMENT::\a\a";

cin>>ele;

tree=insert(tree,ele);

break;

case 2:

cout<<"\n\t\a\a****PRE-ORDER TRAVERSAL OF A TREE****\a\a";

preorder(tree);

break;

case 3:

cout<<"\n\t\a\a****IN-ORDER TRAVERSAL OF A TREE****\a\a";

inorder(tree);

break;

Page 15: Makalah Binary Tree

case 4:

cout<<"\n\t\a\a****POST-ORDER TRAVERSAL OF A TREE****\a\a";

postorder(tree);

break;

case 5:

exit(0);

}

}while(ch!=5);

}

node *insert(node *tree,int ele)

{

if(tree==NULL)

{

tree=new node;

tree->left=tree->right=NULL;

tree->data=ele;

count++;

}

else

if(count%2==0)

tree->left=insert(tree->left,ele);

else

tree->right=insert(tree->right,ele);

return(tree);

}

void preorder(node *tree)

{

if(tree!=NULL)

{

cout<<tree->data;

preorder(tree->left);

preorder(tree->right);

getch();

}

}

void inorder(node *tree)

{

if(tree!=NULL)

{

inorder(tree->left);

cout<<tree->data;

inorder(tree->right);

getch();

}

}

Page 16: Makalah Binary Tree

void postorder(node *tree)

{

if(tree!=NULL)

{

postorder(tree->left);

postorder(tree->right);

cout<<tree->data;

getch();

}

}

Page 17: Makalah Binary Tree

BAB 4

PENUTUP

4.1 Kesimpulan

Dari uraian pada pembahasan yang disajikan, maka dapat ditarik sebuah

kesimpulan bahwa :

1. Binary Tree adalah Suatu tree dengan syarat bahwa tiap node (simpul) hanya

boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah.

Tiap node dalam binary tree hanya boleh memiliki paling banyak dua child (anak

simpul), Secara khusus anaknya dinamakan kiri dan kanan.

2. Terdapat tiga jenis binary tree diantaranya pertama adalah Full Binary Tree yaitu

semua node atau simpul (kecuali leaf) pasti memiliki 2 anak dan tiap subtree

memiliki panjang path yag sama,kedua adalah Complete Binary Tree yaitu pada

dasarnya mirip dengan full binary tree, tapi tiap subtree boleh memiliki panjang

path yang berbeda dan tiap node ((kecuali left ) memiliki 2 anak. Dan yang ketiga

adalah Skewed Binary Tree yaitu binary tree yang semua nodenya (kecuali leaf)

hanya memiliki satu anak.

3. Terdapat beberapa operator-operator yang bekerja dalam binary tree yaitu

search,delete,insert,transverse,create,clear dan masih banyak yang lainnya.

4. Implementasi program yaitu dapat dibuat dengan menggunakan linked list secara

rekursif dan linked list yang digunakan adalah double linked list non circular.

Page 18: Makalah Binary Tree