KELAS: L
Oleh :
Kelompok 3
Maryamah
135150201111008
Vivilia Putri A
135150201111230
Weni Agustina
135150201111019
Riza Rizqiana
135150207111019
Sema Yuni F
135150201111189
1. Review Paper
Judul :
STUDI MINIMUM SPANNING TREE DENGAN ALGORITMA PRIM DAN
KRUSKAL
Nama Pengarang :
Hadyan Ghaziani Fadli
Nama Jurnal :
Studi Minimum Spanning Tree Dengan Algoritma Prim Dan Kruskal
Masalah :
Untuk kendaraan motor seperti mobil, menghubungkan beberapa kota besar
mungkin akan dihubungkan secara langsung dengan jalan tol. Namun pada umumnya,
seperti pada jalan kereta api, untuk penghematan pembuatan jalan, rel kereta api dibuat
tidak langsung, seperti jalan tol menghubungkan 2 kota yang cukup jauh secara langsung.
Namun, melalui kota-kota yang beradi diantaranya, jadi jalan ini sekaligus
menghubungkan kota-kota yang ada diantara kota asal dan kota tujuan kita.
Untuk menentukan jalur mana yang akan dipakai agar efisien maka diperlukan
cara untuk mendapatkan jalur terpendek. Karenanya pencarian sebuah jalan dengan jarak
minimal sangatlah dibutuhkan khususnya dalam dunia transportasi di dunia. Pada Tahun
1926, seorang Czech scientist, Otakar Boruvka menemukan sebuah algoritma yang
dikenal dengan Boruvkss Algoritma. Seiring berjalannya waktu, ada 2 algoritma lain
yang lebih umum untuk dipakai yaitu Algoritma Prim da Algoritma Kruskal.
Walaupun ada lebih dari 1 algoritma yang berbeda, namun jalan yang didapat
akan sama panjangnya. Metode yang dipakai oleh ketiga Algoritma ini adalah metode
Minimum Spanning Tree.
2. Algoritma
o Algoritma Prim
Algoritma Prim adalah suatu algoritma di dalam teori graf yang bertujuan
menemukan Minimum Spanning tree untuk menghubungkan graf berbobot.
Ini berarti algoritma ini menemukan subset dari sebuah tepi yang membentuk sebuah
Tree diminimalkan. Jika graf tidak terhubung, maka ini hanya akan menemukan
sebuah Minimum Spanning Tree menjadi satu jalur untuk komponen yang terhubung.
Algoritma ini ditemukan pada tahun 1930 oleh seorang ahli matematika Vojtech
Jamik, dan kemudian dipublikasikan oleh seorang computer scientist Robert C. Prim
pada tahun 1957 dan ditemukan kembali oleh Dijkstra pada tahun 1959. Oleh karena
itu, terkadang Algoritma ini juga disebut DJP algoritma atau algoritma Jamik.
Alur dan Cara Kerja Algoritma Prim
Alur :
A
7
5
B
7
9
15
C
5
6
9
A
7
5
18
7
9
15
C
G
6
9
A
7
5
9
15
D
6
18
F
1
A
7
5
9
15
6
9
F
A
1
7
15
D
6
F
A
1
7
C
G
C
G
Disin, vertices yang masih tersedia adalah
C dan
5 G. C memiliki jarak5 dari E dan G
7 memiliki
jarak 9 dari E. C yang dipilih. Jadi
15
D
6
F
A
1
7
C
G
5
7 11 dari
F, dan 9 dari E. E yang terdekat ,
15
D
6
F
1
Cara Kerja :
Membuat sebuah tree yang mengandung vertex tunggal, pilih yang berbobot
minimum.
Membuat sebuah set (yang belum tercakup) yang mengandung semua vertices
yang
o Algoritma Kruskal
Algoritma Kruskal pertama kali dipopulerkan oleh Joseph Kruskal pada tahun
1959. Algoritma Kruskal adalah sebuah algoritma dalam teori grf yang mencari sebuah
Minimum Sanning Tree untuk sebuah graf yang berbobot dan yang terhubung. Ini
berarti mencari subset dari sisi yang membentuk sebuah Tree yag menampung setiap
vertex, dimana total bobot dari semua sisi dalam Tree adalah minimum. Jika graf tidak
terhubung, kemudian ini mencari sebuah Minimum Spanning Forest (sebuah
Minimumu Spanning Tree untuk tiap komponen yang terhubung). Algoritma Kruskal
adalah suatu contoh dari Algoritma Greedy.
Perbedaan prinsip antara algoritma prim dan Kruskal adalah jika pada algoritma
prim sisi yang dimasukkan ke dalam Tree harus bersisian dengan sebuah simpul di
Tree, maka pada algoritma kruskal sisi yang dipilih tidak perlu bersisian dengan
sebuah simpul di Tree, asalkan penambahan sisi tersebut tidak membentuk cycle.
Kedua algoritma ini berbeda dalam metodologinya, tetapi keduanya mempunyai
tujuan menemukan minimum spanning
7
5
9
15
6
9
A
7
5
9
15
18
ADG
dan
5 CE adalah sisi yang paling pendek,
7
dengan panjangnya 5, dan AD ditetapkan
sebagai
E awal, jadi kita beri highlight
6
9
F
A
1
7
D
A
C
G
CE sekarang adalah sisi terpendek yang
9
15
6
7
E
8
FB
7
1
9
15
E
G
6
9
F
1
A
7
5
15
D
6
A
7
5
18
7 sisi 5terpendek
9
15
D
6
F
1
A
7
5
GC
Terakhir,
proses berakhir dengan sisi EG
5
7 dengan
panjang 9, dan Minimum Spanning
15
6
9
F
Cara Kerja :
pemisah.
Membuat sebuah set S yang mengandung semua sisi di dalam graf.
While S tidak kosong :
Membuang sebuah sisi dengan bobot minimum dari S
Jika sebuah sisi menghubungkan dua Tree yang berbeda, kemudian
menambahkan ini ke dalam Forest, mengkombinasikan dua Tree ke dalam 1 Tree
Dilain pihak membuang sisi tersebut Dalam terminasi dari algoritma ini, Forest
hanya memiliki satu komponen dan membentuk sebuah Minimum Spanning
Tree dari graf.
3. Implementasi
Source code utama yang berisi algoritma
o Algoritma Prim
Graph.java
public void Prim( )
{
int i, j, k, x, y;
boolean[] RuteDilewati = new boolean[Nodes];
predNode = new int[Nodes];
// dimulai pada node awal = 0 pada sebuah vertex
RuteDilewati[0] = true;
for ( k = 1; k < Nodes; k++ )
{
RuteDilewati[k] = false;
}
predNode[0] = 0;
printSeluruhRute( RuteDilewati );
for (k = 1; k < Nodes; k++)
{
x = y = 0;
for ( i = 0; i < Nodes; i++ )
for ( j = 0; j < Nodes; j++ )
{
if ( RuteDilewati[i] && !RuteDilewati[j] &&
Jarak[i][j] < Jarak[x][y] )
{
x = i;
y = j;
}
}
System.out.println("Jarak Min : (" +
+ x + "," +
+ y + ")" +
"Jarak = " + Jarak[x][y]);
predNode[y] = x;
RuteDilewati[y] = true;
printSeluruhRute( RuteDilewati );
System.out.println();
}
int[]
printRuteMin( predNode );
}
o Algoritma Kruskal
Graph.cpp
void KruskalMST(struct Graph* graph){
int V = graph->V;
struct Edge result[V];
int e = 0;
int i = 0;
qsort(graph->edge, graph->E, sizeof(graph->edge[0]),
myComp);
struct subset *subsets = (struct subset*) malloc( V *
sizeof(struct subset));
for (int v = 0; v < V; ++v){
subsets[v].parent = v;
subsets[v].rank = 0;
}
while (e < V - 1) {
struct Edge next_edge = graph->edge[i++];
int x = find(subsets, next_edge.src);
int y = find(subsets, next_edge.dest);
if (x != y) {
result[e++] = next_edge;
Union(subsets, x, y);
}
}
printf("Following are the edges in the constructed MST\n");
for (i = 0; i < e; ++i)
printf("%d -- %d == %d\n", result[i].src,
result[i].dest, result[i].weight);
return;
}
o Algoritma Kruskal
4. Analisis kompleksitas
4.1 Penentuan n
o Algoritma Prim
n = 8.
o Algoritma Kruskal
Pada algoritma kruskal ini kita menginputkan n = v-i
4.2 Basic operation & alasan pemilihan
o Algoritma Prim
for ( i = 0; i < Nodes; i++ )
for ( j = 0; j < Nodes; j++ )
Alasan : Karena for i dan for j sering dieksekusi dalam program algoritma prim.
o Algoritma Kruskal
While (e < V-1)
Alasan : eksekusi dilakukan berulang-ulang sesuai dengan nilai edge dan vertex
yang diinputkan. Jika nilai yang diinputkan 5 maka eksekusi akan dilakukan 5
kali.
4.3 Proses memperoleh C(n)
Penentuan kelas OOG
o Algoritma Prim
nm nm
C ( n) = . 1
i=1
j=1
nm
1(nm1+1)
i=1
nm
1(nm)
i=1
( nm1+ 1 ) (nm)
( nm) ( nm )
n2nmnmm2
2
n 2 nmm
T ( n ) =n ( nm ) +1
o Algoritma Kruskal
Best case : Cn =
1
i=1
Notasi asymptotic
o Algoritma Prim
O(n ( nm )+1)
o Algoritma Kruskal
Best case = O (1)
T (n) = O ((n+m)log n )
: TIF-L
: 03
Pemilihan paper
acuan
Review
Kompleksitas
Implementasi
Lain2
Jur
Int
Al>1
Jud+Nam
Mslh Ut
Desc Al
N
Bo
C(n)
OOG
ASYM
Cde
Scrst
Rap
Tep
Jumlah
Ini adalah sebuah graf berbobot yang asli, ini bukan sebuah Tree
karena definisi sebuah Tree tidak memiliki sirkuit, dan diagram
ini memiliki sirkuit. Nama yang lebih benar untuk diagram ini
adalah sebuah graf atau network. Nomer didekat busur adalah
bobotnya. Tidak satupun dari titik sudut yang diberi highlight dan
vertex D dipilih sebagai starting point.