Pohon Biner
Pohon Biner
Pohon Biner
STRUKTUR DATA
Disusun oleh :
(
KATA PENGANTAR
Puji Syukur khadirat Allah Yang Maha Kuasa karena atas Rahmat dan
Hidayah-Nyalah kami dapat menyelesaikan Tugas Akhir Semester ini.
Makalah ini merupkan salah satu bagian dalam Tugas kami yang berjudul
BINARY TREE &GRAPH. Terima kasih juga kepada Bapak ..................
selaku dosen Mata Kulia Struktur Data di kelas kami.
Makalah ini berisi tentang Pembelajaran mengenai BINARY TREE
GRAPH di dalam Struktur Data. Tentunya kami sangat berharap Makalah ini
dapat berguna bagi siapapun yang membacanya.
Masih banyak kekurangan dalam makalah ini .Selain itu dalam
penyusunan tugas atau materi ini, tidak sedikit hambatan yang penulis
hadapi. Namun penulis menyadari bahwa kelancaran dalam penyusunan
materi ini tidak lain berkat bantuan, dorongan dan bimbingan teman-teman,
sehingga kendala-kendala yang penulis hadapi teratasi
Surabaya, 19 Juli2016
Tim Penyusun
DAFTAR ISI
I. PENDAHULUAN
Dalam
istilah
ilmu
komputer,
sebuah
struktur
data
adalah
melakukan pointer sembarangan setiap saat, kecuali hanya satu kali dengan
kata lain hanya secara sequential
Sedangkan graph merupakan struktur data yang paling umum. Jika
struktur linear memungkinkan pendefinisian keterhubungan sikuensial antara
entitas data, struktur data tree memungkinkan pendefinisian keterhubungan
hirarkis, maka struktur graph memungkinkan pendefinisian keterhubungan tak
terbatas antara entitas data.
Banyak entitas-entitas data dalam masalah-masalah nyata secara
alamiah memiliki keterhubungan langsung (adjacency) secara tak terbatas
demikian. Contoh: informasi topologi dan jarak antar kota-kota di pulau Jawa.
Dalam masalah ini kota x bisa berhubungan langsung dengan hanya satu
atau lima kota lainnya. Untuk memeriksa keterhubungan dan jarak tidak
langsung antara dua kota dapat diperoleh berdasarkan data keterhubunganketerhubungan langsung dari kota-kota lainnya yang memperantarainya.
Representasi data dengan struktur data linear ataupun hirarkis pada
masalah ini masih bisa digunakan namun akan membutuhkan pencarianpencarian yang kurang efisien. Struktur data graph secara eksplisit
menyatakan
keterhubungan
ini
sehingga
pencariannya
langsung
(2)
(3)
A
Derajat keluar = 2
(4)
(5)
A
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.
Pada Binary Tree terdapat yang namanya simpul (node). Node pada binary
tree maksimum berjumlah 2n-1 dan jumlah maksimum pada setiap tingkat
adalah 2n
A
Tingkat ke-0, jumlah max=2
Tingkat ke-1, jumlah max=2
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
10
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
3. Skewed Binary Tree yaitu binary tree yang semua nodenya (kecuali
leaf) hanya memiliki satu anak.
D
11
Untuk data
punya)
12
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.
2.
Contoh :
Diketahui key dari 7 record (K, M, L, N, P, O, Q)
Binary Search Tree dari 7 key diatas dapat dibentuk :
13
Beberapa macam
pola
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.
1
7
6
14
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.
6
3. Post-Order-Transversal
Post Order Transversal adalah penelusuran dimulai
darisimpul
anak
kiri
kemudian
simpul
anak
kanan
9
5
8
4
15
4. Level-Order-Transversal
Level Order Transversal adalah penelusuran dimulai dari
tingkat ke i dan dilanjutka pada tingkat ke ( i+1).
1
2
5
5
16
G = Graph
V = Simpul atau Vertex, atau Node, atau Titik
E = Busur atau Edge, atau arc
17
18
b. Graph Berarah
Dalam matrik diatas dapat kita lihat bahwa kotak yang berisi angka
satu menunjukan bahwa dalam dua vertex tersebut terdapat edge yang
menghubungkannya. Dan jika dalam kotak terdapat angka nol, maka hal
tersebut menandakan tidak ada edge yang mengubungkan secara langsung
dua vertex tersebut.
Untuk representasi dalam pemorgraman komputer, graf tersebut
dapatdigambarkan seperti dibawah ini :
19
1. Incident
Jika e merupakan busur dengan simpul-simpulnya adalah v dan
w yang ditulis e=(v,w), maka v dan w disebut terletak pada e, dan e
disebut incident dengan v dan w.
2. Degree
Didalam Graph ada yang disebut dengan Degree,Degree
mempuyai 3 jenis antara lain :
3. Adjacent
Pada graph tidah berarah, 2 buah simpul disebut adjacent bila ada
busur yang menghubungkan kedua simpul tersebut. Simpul v dan w
disebut adjacent.
20
21
2.
ke x.Secara grafis sisi pada undigraph tidak memiliki mata panah dan
secaranotasional menggunakan kurung kurawal.
Contoh Undigraph G = {V, E}
V = {A, B, C, D, E, F, G, H, I,J, K, L, M}
E = { {A,B},{A,C}, {A,D}, {A,F}, {B,C}, {B,H}, {C,E}, {C,G}, {C,H},
{C,I}, {D,E},{D,F}, {D,G}, {D,K}, {D,L}, {E,F}, {G,I}, {G,K}, {H,I},
{I,J}, {I,M}, {J,K},{J,M}, {L,K}, {L,M}}.
Siklus: suatu path dengan panjang lebih dari satu yang dimulai
dan berakhir pada suatu verteks yang sama.
23
24
dengan
secaramendalam
metode
hingga
yang
ini
dilakukan
paling
akhir
dari
node
awal
(dead-end)
atau
tujuan
akhir(goal).Depth
First
Search,
memiliki
kelebihan
open. Selain itu, Depth First Search memerlukan memori yang relatif kecil
karena banyak node pada lintasan yang aktif saja yang Selain kelebihan,
Depth
First
Search
juga
memiliki
kelemahan
di
antaranya
adalah
25
BreadthFirstSearch
(BFS)
yang
dilakukan
adalah
dengan mengunjungi tiap-tiap node pada level yang sama hingga ditemukan
goal state-nya.
Padadiatas,state21
merupakantujuannya
(goal)sehinggabila
ditelusuri
26
1)
2)
3)
4)
5)
6)
7)
Open = [8, 9, 10, 11, 12, 13, 14]; closed = [7, 6, 5, 4, 3, 2, 1].
9)
sejumlah
besar
pekerjaan,
khususnya
jika lintasan
Lebih
jauh
karena
mula-mula
semua
keadaan ditemukan
melalui lintasan terpendek sehingga setiap keadaan yang ditemui pada kali
kedua didapati pada sepanjang sebuah lintasan yang sama atau lebih
panjang. Kemudian, jika tidak ada kesempatan ditemukannya keadaan yang
27
identik
pada
sepanjang
lintasan
menghapusnya
F. Shortest Path
Pencarian shortest path (lintasan terpendek) adalah masalah umum
dalam suatu weighted, connected graph. Misal : Pencarian jaringan jalan raya
yangmenghubungkan kota-kota disuatu wilayah.
1. Lintasan
terpendek
yag
menghubungkan
antara
dua
kota
lintasan
terpendek
masing-masing
antara
tiap
28
algoritma-algoritma
graph
nanti
pengertian
bobot
akan
berpengertian
laba
maka
kuantitas-kuantitas
terkait
adalah
b. Algoritma Dijkstras
Algoritma Dijkstra's :
1. Menyelesaikan problem single-source shortest-path ketika semua edge
memiliki bobot tidak negatif.
2. Algoritma greedy mirip ke algoritma Prim's.
3. Algoritma di awali pada vertex sumber s, kemudian berkembang
membentuk sebuah tree T, pada akhirnya periode semua vertex
dijangkau dari S. Vertex di tambah ke T sesuai urutan
Misalnya :
Pertama S, kemudian vertex yang tepat ke S, kemudian yang tepatberikutnya
dan seterusnya.
29
c. Dynamic Programming
Terdiri dari sederetan tahapan keputusan. Pada setiap tahapan
berlakuprinsip optimality (apapun keadaan awal dan keputusan yang
diambil,keputusan berikutnya harus memberikan hasil yang optimal dengan
melihathasil keputusan sebelumnya.
Misalnya :
Multistage Graph
Dimana:
Dengan :
30
31
Definisi
Pohon
rentangan
atau
spanning
tree
dari
suatu
Diketahui sebuah graph tak berarah dan tak berbobot sebagai berikut :
Bila jalur (edge) mempunyai biaya (cost) maka yang dicari adalah minimum
cost spanning tree.
32
1. Algoritma Kruskal
adanya
pemeriksaan
kondisi
siklik
tersebut.Salah
satupemecahaannya adalah dengan subsetting yaitu pembentukansubsetsubset yang disjoint dan secara bertahap dilakukanpenggabungan atas tiap
dua subset yang berhubungan dengan suatusisi dengan bobot terpendek.
Algoritma lengkapnya:
MST_KRUSKAL (G)
{ For setiap vertex v dalam V[G] Do
{ set S(v) {v} }
Inisialisasi priority queue Q yang berisi semua edge dari G,
33
}
2. Algoritma Prim
pemanggil
atau
dipilih
sembarang
oleh
algoritma.
34
35
36
output :
Ascending
37
38
B. Class doubleLinkList
public class doubleLinkList{
private node first; //menyimpan node pertama
private node last; //menyimpan node terakhir Linklist
private node temp; //variabel pembantu
private node index; //variabel pembantu
public void addFirst(String input){ //menambah nodediawal
node n = new node(input); //membuat node
if(first==null){ //kondisi linklist kosong
first=n; //mengeset n pada first dan lastlast=n;}
else{
//kondisi sama ketika berisi 1 node dan banyak node
n.setNext(first); //mengeset pointer next pada node n menuju ke first
first.setPrev(n); //mengeset pointer prev pada node first menuju ke n
first = n; //menjadikan n sebagai first}}
public void addAfterFirst(String input){ //menambah node ke setelah pertama
node n = new node(input);
if(first==null){first=n;last=n;}
else if(first==last){
first.setNext(n); //ada beberapa alternatif penulisan
n.setPrev(first);last=n;}
else{
//node dalam linklist lebih dari satu
index = first.getNext();n.setNext(index);index.setPrev(n);
first.setNext(n);n.setPrev(first);}}
public void addBeforeLast(String input){ //menambah node sebelum terakhir
implementasikan...
node n = new node(input);
if(first==null){first=n;last=n;}
else if(first==last){last.setPrev(n);n.setNext(first);first=n;}
else{
index=last.getPrev();n.setNext(last);last.setPrev(n);
index.setNext(n);n.setPrev(index);}}
public void addLast(String input){ //menambah node pada akhir
implementasikan.....
node n = new node(input);
if(first==null){first=n;last=n;}
else if(first==last){first.setNext(n);n.setPrev(first); last=first.getNext();}
else{last.setNext(n);n.setPrev(last);last=n;
}}
public String removeFirst(){
if (first==null){return null;}
else if (first == last){temp = first;first = null;last = null;return
temp.getData();}
else{temp = first;first =
first.getNext();first.getPrev().setNext(null);first.setPrev(null);return
temp.getData();}}
public String removeLast(){ //implementasikan
if(first==null){return null;}
else if(first==last){temp=first;first=null;last=null;return
temp.getData();}else{temp=last;last=temp.getPrev();temp.setPrev(null);
last=null;return temp.getData();}}
public String getFirst(){
if (first!=null){return first.getData();}
else{return null;}}
public String getLast(){if (first!=null){return last.getData();}
else{return null;} }}
39
C. Class mainDoubleLinkList
import java.util.*;
public class mainDoubleLinkList {
public static void main(String []args){
boolean kondisi = true;
doubleLinkList ojk = new doubleLinkList();
while(kondisi){
System.out.println("\nPROGRAM DOUBLE LINK LIST");
System.out.println("==============================");
System.out.println("Memilih menu");
System.out.println("1. Tambah di awal");
System.out.println("2. Tambah setelah awal");
System.out.println("3. Tambah sebelum akhir");
System.out.println("4. Tambah di akhir");
System.out.println("5. Hapus di awal");
System.out.println("6. Hapus di akhir");
System.out.println("7. Lihat awal");
System.out.println("8. Lihat akhir");
System.out.println("9. Keluar");
System.out.println("==============================");
System.out.print(">> ");
Scanner kal = new Scanner(System.in);
int menu = kal.nextInt();
System.out.println("==============================\n");
Scanner dt = new Scanner(System.in);
if(menu==1){
System.out.print("Masukan data : ");
String data1 = dt.nextLine();ojk.addFirst(data1);}
else if(menu==2){System.out.print("Masukan data : ");
String data2 = dt.nextLine();ojk.addAfterFirst(data2);}
else if(menu==3){System.out.print("Masukan data : ");
String data3 = dt.nextLine();ojk.addBeforeLast(data3);}
else if(menu==4){System.out.print("Masukan data : ");
String data4 = dt.nextLine();ojk.addLast(data4);}
else if(menu==5){
if(ojk.getFirst()!=null){ojk.removeFirst();
System.out.println("Data telah dihapus !!");}
else{System.out.println("Data kosong !!");}}
else if(menu==6){
if(ojk.getLast()!=null){ojk.removeLast();
System.out.println("Data telah dihapus !!");}
else{System.out.println("Data kosong !!");} }
else if(menu==7){
if(ojk.getFirst()==null){System.out.print("data kosong");}
else{System.out.println(ojk.getFirst());}}
else if(menu==8){if(ojk.getLast()==null){
System.out.print("data kosong");}
else{System.out.println(ojk.getLast()); } }
else if(menu==9){kondisi=false;
}}}}
40
Output :
41
42
43
44
VI.KESIMPULAN
Mengenal Graph :
Terdiri dari node dan terdiri dari link (busur)
Node disebut vertex dan Link disebut edge
Informasi penting dalam graph adalah koneksi antar vertex
Pada undirected graph, tidak terdapat directions (arah), Edge dari v0
ke v1 adalah sama dengan edge dari v1 ke v0
Jika sebuah masalah dapat direpresentasikan ke dalam bentukkgraph
maka solusi dari masalah tersebut bisa dicari dengan bantuangraph
Setiap
vertex
mewakili
sebuah
kondisi
(state)
dan
edge
45
DAFTAR PUSTAKA
46