Anda di halaman 1dari 32

MAKALAH

STRUKTUR DATA
GRAPH DAN TREE

Nama
NIM
Kelas

: Mohammad Andi Triansyah


: J3D214117
: TEK 1B P2

PROGRAM KEAHLIAN TEKNIK KOMPUTER


PROGRAM DIPLOMA
INSTITUT PERTANIAN BOGOR
BOGOR
2015

PENDAHULUAN
Dalam istilah ilmu komputer, sebuah struktur data adalah cara penyimpanan,
pengorganisasian dan pengaturan data di dalam media penyimpanan komputer sehingga data
tersebut dapat digunakan secara efisien. Dalam tehnik pemrograman, struktur data berarti tata
letak data yang berisi kolom-kolom data, baik itu kolom yang tampak oleh pengguna (user)
ataupun kolom yang hanya digunakan untuk keperluan pemrograman yang tiadak tampak oleh
pengguna.
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 keterhubungan-keterhubungan
langsung dari kota-kota lainnya yang memperantarainya.
Representasi data dengan struktur data linear ataupun hirarkis pada masalah ini masih
bisa digunakan namun akan membutuhkan pencarian-pencarian yang kurang efisien. Struktur
data graph secara eksplisit menyatakan keterhubungan ini sehingga pencariannya langsung
(straightforward) dilakukan pada strukturnya sendiri.
Graf adalah salah satu jenis struktur data yang terdiri dari titik (vertex) dan garis (edge),
dimana dalam graf tersebut, vertex - vertex yang ada dihubungkan oleh edge, hingga menjadi
suatu kesatuan yang disebut graf. Sebagai contoh dari pemodelan graf adalah peta kota kota,
dimana kota disini sebagai vertex dan jalur yang menghubungkannya berlaku sebagai edge.
Agar lebih jelas perhatikan gambar dibawah ini :

Dalam gambar tersebut, terdapat beberapa kota yang berada dipulau jawa dimana kota kota tersebut dihubungkan oleh beberapa jalur jalur yang ada. Untuk contoh diatas kita bisa
menganggap bawah kota-kota yang ada merupakan vertex, dan jalur-jalur yang menghubungkan
kota-kota tersebut sebagai edge. Sehingga secara keseluruhan peta diatas dapat dibuat
pemodelannya sebagai sebuah graf.
Ada terdapat beberapa jenis graf yang bisa kita gunakan, yaitu beberapa diantaranya
adalah sebagai berikut :
Graf Berarah : adalah graf yang edge-nya memiliki arah, sebagai contoh edge AB
menghubungkan vertex A ke B, dimana hubungan vertex B ke A, harus diperoleh dari edge lain,
yaitu edge BA, dan jika edge BA tidak ada, maka vertex B ke A tidak memiliki hubungan, meski
vertex A ke B memiliki hubungan
Graf Tak Berarah : adalah graf yang edge-nya tidak memiliki arah, sehingga jika edge AB
menghubungkan vertex A ke B, maka secara otomatis juga menghubungkan vertex B ke A.
Graf Berbobot : adalah suatu graf dimana edge dari graf tersebut memiliki bobot atau nilai
tertentu.
Graf Tidak Berbobot : adalah suatu graf dimana edge dari graf tersebut tidak memiliki bobot
atau nilai. Untuk merepresentasikannya dalam pemrograman komputer, graf dapat disusun dari
LinkedList yang berada dalam LinkedList.
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. 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 kiiri

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 dan
kanan) itu sendiri adalah juga binary search tree.

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
semakin cepat, jika kita menggunakan 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 prose insert dan delete dalam list contigue butuh
memindahkan 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 squential.

PEMBAHASAN
I. GRAPH
A. Definisi Graph
Suatu graph didefinisikan oleh himpunan verteks dan himpunan sisi (edge). Verteks
menyatakan entitas-entitas data dan sisi menyatakan keterhubungan antara verteks. Biasanya
untuk suatu graph G digunakan notasi matematis.
G = (V, E)
Dimana :
G = Graph
V = Simpul atau Vertex, atau Node, atau Titik
E = Busur atau Edge, atau arc
V adalah himpunan verteks dan E himpunan sisi yang terdefinisi antara pasanganpasangan verteks. Sebuah sisi antara verteks x dan y ditulis {x, y}. Suatu graph H = (V1, E1)
disebut subgraph dari graph G jika V1 adalah himpunan bagian dari V dan E1 himpunan bagian
dari E.
Cara pendefinisian lain untuk graph adalah dengan menggunakan himpunan
keterhubungan langsung Vx. Pada setiap verteks x terdefinisi Vx sebagai himpunan dari verteksverteks yang adjacent dari x. Secara formal:
Vx = {y | (x,y) -> E}
Dalam digraph didefinisikan juga terminologi-terminologi berikut ini. Predesesor dari
suatu verteks x (ditulis Pred(x)) adalah himpunan semua verteks yang adjacent ke x. Suksesor
dari verteks x (ditulis Succ(x)) adalah himpunan semua verteks yang adjacent dari x, yaitu
adjacenct set di atas.
Struktur data yang berbentuk network/jaringan, hubungan antar elemen adalah many-tomany. Contoh dari graph adalah informasi topologi jaringan dan keterhubungan antar kota-kota.
Keterhubungan dan jarak tidak langsung antara dua kota sama dengan data keterhubungan
langsung dari kota-kota lainnya yang memperantarainya. Penerapan struktur data linear atau
hirarkis pada masalah graph dapat dilakukan tetapi kurang efisien. Struktur data graph secara
eksplisit menyatakan keterhubungan ini sehingga pencariannya langsung (straight forward)
dilakukan pada strukturnya sendiri.
1. Struktur Data Linear = keterhubungan sekuensial antara entitas data
2. Struktur Data Tree = keterhubungan hirarkis
3. Struktur Data Graph = keterhubungan tak terbatas antara entitas data.

Representasi Graph dalam Bentuk Matrik


a. Graph Tak Berarah

Graf tersebut dapat direpresentasikan dalam sebuah matrik 5x5 , dimana baris dan kolom
di matriks tersebut menunjukan vertex yang ada.

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 dapat digambarkan
seperti dibawah ini :

B. Istilah Dalam Graph


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 :

Degree dari suatu verteks x dalam undigraph adalah jumlah busur yang incident
dengan simpul tersebut.

Indegree dari suatu verteks x dalam digraph adalah jumlah busur yang kepalanya
incident dengan simpul tersebut, atau jumlah busur yang masuk atau menuju
simpul tersebut..

Outdegree dari suatu verteks x dalam digraph adalah jumlah busur yang ekornya
incident dengan simpul tersebut, atau jumlah busur yang keluar atau berasal
dari simpul tersebut.

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.

Pada graph berarah, simpul v disebut adjacent dengan simpul w bila ada busur dari w
ke v.

4. Successor dan Predecessor


Pada graph berarah, bila simpul v adjacent dengan simpul w, maka simpul v
adalah successor simpul w, dan simpul w adalah predecessor dari simpul v.
5. Path
Sebuah path adalah serangkaian simpul-simpul berbeda yang adjacent secara
berturut-turut dari simpul satu ke simpul berikutnya.

C. Jenis - Jenis Graph


1. Directed Graph (Digraph)
Jika sisi-sisi graph hanya berlaku satu arah. Misalnya : {x,y} yaitu arah x ke y, bukan dari
y ke x, x disebut origin dan y disebut terminus. Secara notasi sisi digraph ditulis sebagai vektor
(x, y).
Contoh Digraph 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)}.

2. Graph Tak Berarah (Undirected Graph atau Undigraph)


Setiap sisi {x, y} berlaku pada kedua arah: baik x ke y maupun y ke x. Secara grafis sisi
pada undigraph tidak memiliki mata panah dan secara notasional 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}}.

Khusus graph, undigraph bisa sebagai digraph (panah di kedua ujung edge berlawanan)
Struktur data linear maupun hirarkis adalah juga graph. Node-node pada struktur linear ataupun
hirarkis adalah verteks-verteks dalam pengertian graph dengan sisi-sisinya menyusun node-node
tersebut secara linear atau hirarkis.

Struktur data linear adalah juga tree dengan pencabangan pada setiap node hanya satu
atau tidak ada. Linear 1-way linked list (digraph), linear 2- way linked list (undigraph).
D. Konektivitas Tiap Jenis Graph
a. Konektivitas pada Undigraph

Adjacency: Dua verteks x dan y yang berlainan disebut berhubungan langsung (adjacent)
jika terdapat sisi {x, y} dalam E.

Path: Sederetan verteks yang mana setiap verteks adjacent dengan verteks yang tepat
berada disebelahnya.

Panjang dari path: jumlah sisi yang dilalui path.

Siklus: suatu path dengan panjang lebih dari satu yang dimulai dan berakhir pada suatu
verteks yang sama.

Siklus sederhana: dalan undigraph, siklus yang terbentuk pada tiga atau lebih verteksverteks yang berlainan yang mana tidak ada verteks yang dikunjungi lebih dari satu kali
kecuali verteks awal/akhir.

Dua verteks x dan y yang berbeda dalam suatu undigraph disebut berkoneksi (connected)
apabila jika terdapat path yang menghubungkannya.

Himpunan bagian verteks S disebut terkoneksi (connected) apabila dari setiap verteks x
dalam S terdapat path ke setiap verteks y (y bukan x) dalam S.

Suatu komponen terkoneksi (connected components) adalah subgraph (bagian dari graph)
yang berisikan satu himpunan bagian verteks yang berkoneksi.

Suatu undigraph dapat terbagi atas beberapa komponen yang terkoneksi; jika terdapat
lebih dari satu komponen terkoneksi maka tidak terdapat path dari suatu verteks dalam satu
komponen verteks di komponen lainnya.

Pohon bebas (free tree): suatu undigraph yang hanya terdapat satu komponen terkoneksi
serta tidak memiliki siklus sederhana.
b. Konektivitas pada Digraph

Terminologi di atas berlaku juga pada Digraph kecuali dalam digraph harus dikaitkan
dengan arah tertentu karena pada arah yang sebaliknya belum tentu terdefinisi.

Adjacency ke / dari: Jika terdapat sisi (x,y) maka dalam digraph dikatakan bahwa x
"adjacent ke" y atau y "adjacent dari" x. Demikian pula jika terdapat path dari x ke y maka
belum tentu ada path dari y ke x Jadi dalam digraph keterkoneksian didefinisikan lebih lanjut
lagi sebagai berikut.

Terkoneksi dengan kuat: Himpunan bagian verteks S dikatakan terkoneksi dengan kuat
(strongly connected) bila setiap pasangan verteks berbeda x dan y dalam S, x berkoneksi
dengan y dan y berkoneksi dengan x (dpl., ada path dari x ke y dan sebaliknya dari y ke x).

Terkoneksi dengan Lemah: Himpunan bagian verteks S dikatakan terkoneksi dengan


lemah (weakly connected) bila setiap pasangan verteks berbeda x dan y dalam S, salah satu: x
berkoneksi dengan y (atau y berkoneksi dengan x) dan tidak kebalikan arahnya (dpl., hanya
terdefinisi satu path: dari x ke y atau sebaliknya dari y ke x).

E. Metode Pencarian Vertex


Pencarian vertex adalah proses umum dalam graph. Terdapat 2 metoda pencarian, yakni
Depth First Search (DFS) dan Breadth First Search (BFS).
a. Depth First Search (DFS)
Pencarian dengan metode ini dilakukan dari node awal secara mendalam hingga yang
paling akhir (dead-end) atau sampai ditemukan. Dengan kata lain, simpul cabang atau anak yang
terlebih dahulu dikunjungi.

Proses pencarian dilakukan dengan mengunjungi cabang terlebih dahulu hingga tiba di
simpul terakhir. Jika tujuan yang diinginkan belum tercapai maka pencarian dilanjutkan ke
cabang sebelumnya, turun ke bawah jika memang masih ada cabangnya. Begitu seterusnya
hingga diperoleh tujuan akhir (goal). Depth First Search, memiliki kelebihan diantaranya adalah
cepat mencapai kedalaman ruang pencarian. Jika diketahui bahwa lintasan solusi permasalahan
akan panjang maka Depth First Search tidak akan memboroskan waktu untuk melakukan
sejumlah besar keadaan dangkal dalam permasalahan graf. Depth First Search jauh lebih

efisien untuk ruang pencarian dengan banyak cabang karena tidak perlu mengeksekusi
semua simpul pada suatu level tertentu pada daftar 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
memungkinkan tidak ditemukannya tujuan yang diharapkan dan hanya akan mendapatkan
satu solusi pada setiap pencarian.
b. Breadth First Search (BFS)
Prosedur Breadth First Search (BFS) merupakan pencarian yang dilakukan dengan
mengunjungi tiap-tiap node secara sistematis pada setiap level hingga keadaan tujuan (goal
state) ditemukan. Atau dengan kata lain, penulusuran yang dilakukan adalah dengan
mengunjungi tiap-tiap node pada level yang sama hingga ditemukan goal state-nya.

Implementasi algoritma BFS :


Pengimplementasian BFS dapat ditelusuri dengan menggunakan daftar (list), open, dan closed,
untuk menelusuri gerakan pencarian di dalam ruang keadaan. Prosedur untuk Breadth First
Search dapat dituliskan sebagai berikut:

Pada diatas, state 21 merupakan tujuannya (goal) sehingga bila ditelusuri


prosedur Breadth First Search, diperoleh:

menggunakan

1)
2)
3)
4)
5)
6)
7)
8)
9)

Open = [1]; closed = [ ].


Open = [2, 3, 4]; closed = [1].
Open = [3, 4, 5, 6]; closd = [2, 1].
Open = [4, 5, 6, 7, 8]; closed = [3, 2, 1].
Open = [5, 6, 7, 8, 9, 10]; closed = [4, 3, 2, 1].
Open = [6, 7, 8, 9, 10, 11, 12]; closed = [5, 4, 3, 2, 1].
Open = [7, 8, 9, 10, 11, 12, 13] (karena 12 telah di-open);
closed = [6, 5, 4, 3, 2, 1].
Open = [8, 9, 10, 11, 12, 13, 14]; closed = [7, 6, 5, 4, 3, 2, 1].
Dan seterusnya sampai state 21 diperoleh atau open = [ ].

Ada beberapa keuntungan menggunakan algoritma Breadth First Search ini,


diantaranya adalah tidak akan menemui jalan buntu dan jika ada satu solusi maka Breadth First
Search akan menemukannya, dan jika ada lebih dari satu solusi maka solusi minimum akan
ditemukan.
Namun ada tiga persoalan utama berkenaan dengan Breadth First Search ini yaitu :
1) Membutuhkan memori yang lebih besar, karena menyimpan semua node dalam satu pohon.
2) Membutuhkan sejumlah besar pekerjaan, khususnya jika lintasan solusi terpendek
cukup panjang, karena jumlah node yang perlu diperiksa bertambah secara eksponensial
terhadap panjang lintasan.
3) Tidak relevannya operator akan menambah jumlah node yang harus diperiksa.
Oleh karena proses Breadth First Search mengamati node di setiap level graf
sebelum bergerak menuju ruang yang lebih dalam maka mula-mula semua keadaan akan
dicapai lewat lintasan yang terpendek dari keadaan awal. Oleh sebab itu, proses ini
menjamin ditemukannya lintasan terpendek dari keadaan awal ke keadaan tujuan (akhir).
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 identik pada sepanjang lintasan yang lebih baik maka algoritma akan
menghapusnya
F. Shortest Path
Pencarian shortest path (lintasan terpendek) adalah masalah umum dalam suatu weighted,
connected graph. Misal : Pencarian jaringan jalan raya yang menghubungkan kota-kota disuatu
wilayah.
1. Lintasan terpendek yag menghubungkan antara dua kota berlainan tertentu (Single-source
Single-destination Shortest Path Problems)

2. Semua lintasan terpendek masing-masing dari suatu kota ke setiap kota lainnya (Singlesource Shortest Path problems)
3. Semua lintasan terpendek masing-masing antara tiap kemungkinan pasang kota yang
berbeda (All-pairs Shortest Path Problems)
Untuk memecahkan masing-masing dari masalah-masalah tersebut terdapat sejumlah solusi.
Dalam beberapa masalah graph lain, suatu graph dapat memiliki bobot negatif dan kasus
ini dipecahkan oleh algoritma Bellman-Ford. Yang akan dibahas di sini adalah algoritma Dijkstra
yaitu mencari lintasan terpendek dari suatu verteks asal tertentu vs ke setiap verteks lainnya.
a. Graph berbobot (weighted graph)
Apabila sisi-sisi pada graph disertai juga dengan suatu (atau beberapa) harga yang
menyatakan secara unik kondisi keterhubungan tersebut maka graph tersebut disebut graph
berbobot. Biasanya dalam masalah-masalah graph bobot tersebut merupakan "harga" dari
keterhubungan antar vertex. Pengertian "harga" ini menggeneralisasikan banyak aspek, biaya
ekonomis dari proses/aktifitas, jarak geografis/tempuh, waktu tempuh, tingkat kesulitan, dan lain
sebagainya.
Dalam beberapa masalah lain bisa juga bobot tersebut memiliki pengertian "laba" yang
berarti kebalikan dari "biaya" di atas. Dalam pembahasan algoritma-algoritma graph nanti
pengertian bobot akan menggunakan pengertian biaya sehingga apabila diaplikasikan pada
masalah yang berpengertian laba maka kuantitas-kuantitas terkait adalah kebalikannnya.
Misalnya mencari jarak tempuh minimum digantikan dengan mencari laba maksimum.

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 tepat berikutnya dan seterusnya.
c. Dynamic Programming
Terdiri dari sederetan tahapan keputusan. Pada setiap tahapan berlaku prinsip optimality
(apapun keadaan awal dan keputusan yang diambil, keputusan berikutnya harus memberikan
hasil yang optimal dengan melihat hasil keputusan sebelumnya.
Misalnya : Multistage Graph
Dimana :
Cost (i,j) = Min(C(j,l) + Cost(i+1,l)}
Dengan :
C(j,l) = Bobot edge j dan l
l = Elemen Vi+1 Dan <j,l> eemen E
i=stage ke-I dan j = node dalam V
Proses dimulai dari k-2, dimana k adalah banyak stage.
Perhatikan contoh untuk menentukan biaya termurah dari 1 hingga 12.
Diketahui graph dengan stage sebagai berikut :

Maka langkah-langkah yang dilakukan adalah :


K=5, sehingga dimulai dari S3
Cost(3,6) = Min{6+Cost(4,9); 5+Cost(4,10)} = Min{6+4;5+2} = 7
Cost(3,7) = Min{4+Cost(4,9); 3+Cost(4,10)} = Min{4+4;3+2} = 5
Cost(3,8) = Min{5+Cost(4,10); 6+Cost(4,11)} = Min(5+2;6+5} = 7

Cost(2,2) = Min{4+Cost(3,6);2+Cost(3,7);1+Cost(3,8)}
= Min{4+7;2+5;1+7} = 7
Cost(2,3) = Min{2+Cost(3,6); 7+Cost(3,7)} = Min(2+7; 7+5) = 9
Cost(2,4) = Min{11+Cost(3,8)} = 18
Cost(2,5) = Min{11+Cost(3,7); 8+Cost(3,8)} = Min(11+5;8+7} = 15
Cost(1,1) = Min{9+Cost(2,2);7+Cost(2,3);3+Cost(2,4),2+Cost(2,5)}
= Min{9+7;7+9;3+18;2+15} = 16
Shorthest Path menjadi :
1 -> 3 -> 6 -> 10 -> 12 Atau 1 -> 2 -> 7 -> 10-> 12
Jika ada dua atau lebih shorthest path maka total biaya harus sama.
Shortest Path Pertama adalah :

Shortest Path Kedua adalah :

G. Minimum Spanning Tree


Definisi Pohon rentangan atau spanning tree dari suatu connected graph didefinisikan
sebagai free-tree yang terbentuk dari subset sisi-sisi serta menghubungkan setiap verteks dalam

graph tersebut. Minimum Spanning Tree (MST) adalah pohon rentangan dengan total bobot dari
sisi-sisinya adalah minimal. Dalam penelusuran vertex tidak diperkenankan terbentuk siklus
(cycle).
Diketahui sebuah graph tak berarah dan tak berbobot sebagai berikut :

Kemungkinan Spanning Tree :

Bila jalur (edge) mempunyai biaya (cost) maka yang dicari adalah minimum
cost spanning tree.
H. Algoritma Menentukan Minimum Spanning Tree (MST)
Dua algoritma populer untuk menentukan minimum spanning tree (MST) adalah Kruskal
Algorithm dan Prims Algorithm.
1. Algoritma Kruskal
Algoritma ini lebih sederhana jika dilihat dari konsepnya namun lebih sulit dalam
implementasinya. Idenya adalah mendapatkan satu demi satu sisi mulai dari yang berbobot
terkecil untuk membentuk tree, suatu sisi walaupun berbobot kecil tidak akan diambil jika
membentuk siklik dengan sisi yang sudah termasuk dalam tree. Yang menjadi masalah dalam
implementasinya adalah keperluan adanya pemeriksaan kondisi siklik tersebut.Salah satu
pemecahaannya adalah dengan subsetting yaitu pembentukan subset-subset yang disjoint dan
secara bertahap dilakukan penggabungan atas tiap dua subset yang berhubungan dengan suatu
sisi dengan bobot terpendek. Algoritma lengkapnya:

Tahap pertama, jika dalam V terdapat n verteks maka diinisialisasi n buah subset yang
disjoint, masing-masing berisi satu verteks, sebagai subset-subset awal.
Tahap berikutnya, urutkan sisi-sisi dengan bobot yang terkecil hingga terbesar.
Mulai dari sisi dengan bobot terkecil hingga terbesar lakukan dalam iterasi: jika sisi tsb.
menghubungkan dua vertex dalam satu subset (berarti membentuk siklik) maka skip sisi
tersebut dan periksa sisi berikutnya jika tidak (berarti membentuk siklik) maka kedua
subset dari verteks-verteks yang bersangkutan digabungkan menjadi satu subset yang
lebih besar. Iterasi akan berlangsung hingga semua sisi terproses.

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,
gunakan bobot sebagai keys.
A { } // A berisi edge dari MST
While A lebih kecil dari pada n-1 edge Do
{ set S(v) berisi v dan S(u) berisi u }
IF S(v) != S(u) Then
{ Tambahkan edge (u, v) ke A
Merge S(v) dan S(u) menjadi satu set
}
Return A
}
2. Algoritma Prim
Algoritma dimulai dari suatu verteks awal tertentu dan bisa ditentukan oleh pemanggil
atau dipilih sembarang oleh algoritma. Misalnya verteks awal tersebut adalah v. Pada setiap
iterasi terdapat kondisi di mana himpunan vertex V terbagi dalam dua:
W yaitu himpunan verteks yang sudah dievaluasi sebagai node di dalam pohon, serta (VW) yaitu himpunan verteks yang belum dievaluasi.
Di awal algoritma W diinisialisasi berisi verteks awal v. Selanjutnya, di dalam iterasinya:
Pada setiap adjacency dari tiap verteks dalam W dengan verteks dalam (V-W) dicari sisi
dengan panjang minimal. setelah diperoleh, sisi tersebut ditandai sebagai sisi yang
membentuk tree dan verteks adjacent sisi tersebut dalam (VW) dipindahkan ke W
(menjadi anggota W).
Jika sisi tersebut tidak ada maka proses selesai.
Dari contoh di atas misalnya dilakukan pencarian mulai dari verteks A Maka algoritma
ini menghasilkan tahapan-tahapan iterasi pencarian sbb.:
MST_PRIM (G, w, v)

{ Q V[G]
for setiap u dalam Q do key [u]
key [r] 0
[r] NIl
while queue tidak kosong do
{ u EXTRACT_MIN (Q)
for setiap vertex v dalam Adj[u] do
{ if v ada dalam Q dan w(u, v) < key [v] then
{ [v] w(u, v)
key [v] w(u, v)
}
}
}

II.BINARY TREE
Binary Tree merupakan salah satu bentuk struktur data tidak linear yang
menggambarkanhubungan yang bersifat hirarkis (hubungan one to many) antara elemenelemen. Tree bisa didefinisikan sebagai kumpulan simpul/node dengan satu elemen khusus
yang disebut Root dan node lainnya ( disebut subtree).
Dalam tree terdapat jenis-jenis tree yang memiliki sifat khusus, diantaranya adalah binary
tree.
Binary tree adalah suatu tree dengan syarat bahawa tiap node (simpul) hanya boleh
memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah. Tiap node dalam
binary treee boleh memiliki paling banyak dua child (anak simpul), secara khusus anaknya
dinamakan kiri dan kanan.
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.

Sebuah pohon biner adalah grafik asiklis yang terhubung dimana setiap tingkatan dari
susut tidak lebih dari 3. Ini dapat ditunjukkan 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 yang tak terkoneksi, membolehkan
bermacam koneksi dalam komponen di grafik, kita memanggil struktur sebuah hutan.
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
dai setiap pohon biner.
Pohon biner dapat dikontruksi dari bahasa pemrogaraman primitif dalam berbagai cara.
Dalam bahasa yang menggunakan records dan referensi. Pohon biner secara khas dikontruksi
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 diaatur kedalam nilai nol
khusus atau kesebuah 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 ((i1)/2) (asumsikan akarnya memiliki indeks kosong). Metode ini menguntungkan dari banyak
penyimpanan yang rapat dan memiliki referensi lokal yang lebih baik, teristimewa selama
sebuah preordeer traversal.

Istilah-istilah dalam pohon:


1. Predesesor
Node yang berada diatas node tertentu.
(contoh : B predesesor dari E dan F)
2. Succesor
Node yang berada dibawah node tertentu.
(contoh : E dan F merupakan succesor dari B)
3. Ancestor
Seluruh node yang terletak sebelum node tertentu dan
terletak pada jalur yang sama.
(contoh : A dan B merupakan ancestor dari F)
4. Descendant

Seluruh node yang terletak sesudah node tertentu


dan terletak pada jalur yang sama.
(contoh : F dan B merupakan ancestor dari A)
5. Parent
Predesesor satu level diatas satu node
(contoh : B merupakan parent dari F)
6. Child
Succesor satu level dibawah satu node
(contoh : F merupakan child dari B)
7. Sibling
Node yang memiliki parent yang sama dengan satu
node (contoh : E dan F adalah sibling)
8. Subtree
Bagian dari tree yang berupa suatu node beserta
descendant-nya (contoh : Subtree B, E, F dan
Subtree D, G, H)
9. Size
Banyaknya node dalam suatu tree (contoh : gambar
tree diatas memiliki size = 8)
10. Height
Banyaknya tingkat/level dalam suatu tree (contoh :
gambar tree diatas memiliki height = 3)
11. Root (Akar)
Node khusus dalam tree yang tidak memiliki
predesesor (Contoh : A)
12. Leaf (Daun)
Node-node dalam tree yang tidak memiliki daun
(contoh : Node E,F,C,G,H)
13. Degree (Derajat)
Banyaknya child yang dimiliki oleh suatu node
(contoh : Node A memiliki derajat 3, node B memiliki derajat 2)

Istilah pada pohon Binar


a. Pohon Biner Penuh (Full Binary Tree)

Semua simpul (kecuali daun) memiliki 2 anak dan tiap cabang memiliki panjang ruas yang
sama.

b. Pohon Biner Lengkap (Complete Binary Tree)


Hampir sama dengan Pohon BinerPenuh, semua simpul (kecualidaun) memiliki 2 anak tetapi
tiap cabang memiliki panjang ruas berbeda.

c. Pohon Biner Similer


Dua pohon yang memiliki struktur yang sama tetapi informasinya berbeda.

d. Pohon Biner Ekivalent


Dua pohon yang memiliki struktur dan informasi yangsama.

e. Pohon Biner Miring (Skewed Tree)


Dua pohon yang semua simpulnya mempunyai satu anak / turunan kecuali daun.

Sifat utama Pohon Berakar


1. Jika Pohon mempunyai Simpul sebanyak n, maka banyaknya ruas atau edge adalah (n1).
2. Mempunyai Simpul Khusus yang disebut Root, jika Simpul tersebut memiliki derajat
keluar >= 0, dan derajat masuk = 0.
3. Mempunyai Simpul yang disebut sebagai Daun / Leaf, jika Simpul tersebut berderajat
keluar = 0, dan berderajat masuk = 1.
4. Setiap Simpul mempunyai Tingkatan / Level yang dimulai dari Root yang Levelnya = 1
sampai dengan Level ke - n pada daun paling bawah. Simpul yang mempunyai Level
sama disebut Bersaudara atau Brother atau Stribling.
5. Pohon mempunyai Ketinggian atau Kedalaman atau Height, yang merupakan Level
tertinggi

6. Pohon mempunyai Weight atau Berat atau Bobot, yang banyaknya daun (leaf) pada
Pohon.
7. Banyaknya Simpul Maksimum sampai Level N adalah :
2 (N) - 1
8. Banyaknya Simpul untuk setiap Level I adalah :
N
2 ( I 1)
I=1

Kunjungan pada pohon Biner


Kunjungan pohon biner terbagi menjadi 3 bentuk binary tree :
1. Kunjungan secara preorder ( Depth First Order), mempunyai urutan :
a. Cetak isi simpul yang dikunjungi ( simpul akar ),
b. Kunjungi cabang kiri,
c. Kunjungi cabang kanan .

2. Kunjungan secara inorder ( symetric order), mempunyai urutan :


a. Kunjungi cabang kiri,

b.
c.

Cetak isi simpul yang dikunjungi (simpul akar),


Kunjungi cabang kanan .

3. Kunjungan secara postorder, mempunyai urutan :


a. Kunjungi cabang kiri,
b. Kunjungi cabang kanan,
c. Cetak isi simpul yang dikunjungi ( simpul akar ).

Aplikasi pohon Biner

Notasi Prefix, Infix dan Postfix


Pada bagian ini akan dibahas tentang bagaimana menyusun sebuah Pohon Binar yang
apabila dikunjungisecara PreOrder akan menghasilkan Notasi Prefix,kunjungan secara
InOrder menghasilkan Notasi Infix, dankunjungan PostOrder menghasilkan Notasi
Postfix.
2.1.

Contoh kasus dan Program


Contoh Program Tree dalam C++

#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct Node{
int data;
Node *kiri;
Node *kanan;
};
int count;
void tambah(Node **root, int databaru)
{
if((*root) == NULL){
Node *baru;
baru = new Node;
baru->data = databaru;
baru->kiri = NULL;
baru->kanan = NULL;
(*root) = baru;
(*root)->kiri = NULL;
(*root)->kanan = NULL;
printf("Data telah Dimasukkan");
}
else if(databaru < (*root)->data)
tambah(&(*root)->kiri,databaru);
else if(databaru > (*root)->data)
tambah(&(*root)->kanan,databaru);
else if(databaru == (*root)->data)
printf("Data sudah ada!!");

}
void preOrder(Node *root){
if(root != NULL){
printf("%d " ,root->data);
preOrder(root->kiri);
preOrder(root->kanan);
}
}
void inOrder(Node *root){
if(root != NULL){
inOrder(root->kiri);
printf("%d ",root->data);
inOrder(root->kanan);
}
}
void postOrder(Node *root){
if(root != NULL){
postOrder(root->kiri);
postOrder(root->kanan);
printf("%d ",root->data);
}
}
void search(Node **root, int cari)
{
if((*root) == NULL){
printf("Maaf,Data tidak ditemukan!");
}
else if(cari < (*root)->data)
search(&(*root)->kiri,cari);
else if(cari > (*root)->data)
search(&(*root)->kanan,cari);
else if(cari == (*root)->data)
printf("Data ditemukan!!!");
}
void hapus(Node **root, int del)
{
if((*root) == NULL){
printf("Data tidak ada!!");
}
else if(del < (*root)->data)
hapus(&(*root)->kiri,del);

else if(del > (*root)->data)


hapus(&(*root)->kanan,del);
else if(del == (*root)->data)
{
(*root)=NULL;
printf("Data telah Terhapus");
}
}
int main(){
int pil,cari,del;
Node *pohon;
pohon = NULL;
do{
int data;
system("cls");
printf("
PROGRAM TREE LANJUTAN \n");
printf("================================\n");
printf(" 1. Masukkan Data
\n");
printf(" 2. Transverse
\n");
printf(" 3. Cari
\n");
printf(" 4. Hapus
\n");
printf(" 5. Clear Data
\n");
printf(" 6. Keluar
\n");
printf("================================\n");
printf("Masukkan Pilihan Anda : ");
scanf("%d",&pil);
switch(pil){
case 1:
printf("Masukkan data baru : ");
scanf("%d", &data);
tambah(&pohon,data);
break;
case 2:
printf("\nPreOrder : ");
if(pohon!=NULL) preOrder(pohon);
else printf("Data masih kosong");
printf("\ninOrder : ");
if(pohon!=NULL) inOrder(pohon);
else printf("Data masih kosong");
printf("\npostOrder : ");
if(pohon!=NULL) postOrder(pohon);

else printf("Data masih kosong");


break;
case 3:
printf("Cari data : ");
scanf("%d", &cari);
search(&pohon,cari);
break;
case 4:
printf("Hapus data : ");
scanf("%d", &del);
hapus(&pohon,del);
break;
case 5:
pohon = NULL;
printf("Semua data telah terhapus");
break;
case 6:
return 0;
default:
printf("Maaf, pilihan Anda Salah");
}
getch();
}while(pil!=7);
}
Tampilan program saat dijalankan :

Tampilan Transverse setelah diinput data 1,3,7 dan 5.

KESIMPULAN
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 bentuk kgraph maka solusi dari masalah tersebut bisa
dicari dengan bantuan graph. Setiap vertex mewakili sebuah kondisi (state) dan edge mewakili
transisi antar state
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.
Tree juga adalah suatu graph yang acyclic, simple, connected yang tidak mengandung loop.

Anda mungkin juga menyukai