Implementasi dan Perbandingan Algoritma Minimum Spanning Tree Borůvka dan Prim Dalam Optimasi Panjang Jalur Listrik
A-66
LAMPIRAN
LISTING PROGRAM
KodeůlgoritmaBor vka:
using System;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceJarakTerdekat
{
classBoruvka
{
public ListresultPath;
public double totalJarak;
publicBoruvka()
{
resultPath = new List();
totalJarak = 0;
}
class Graph
{
publicint V, E;
public List edge = new List();
};
class subset
{
publicint parent;
publicint rank;
};
voidboruvkaMST(Graph graph)
{
int V = graph.V;
int E = graph.E;
List edge = graph.edge;
List subsets = new List();
List cheapest = new List();
cheapest.Add(-1);
Universitas Sumatera Utara
A-67
for (int v = 0; v < V; ++v)
{
subsets.Add(new subset());
subsets[v].parent = v;
subsets[v].rank = 0;
cheapest.Add(-1);
}
intnumTrees = V;
doubleMSTweight = 0;
while (numTrees> 1)
{
for (int i = 0; i < E; i++)
{
int set1 = find(subsets, edge[i].src);
int set2 = find(subsets, edge[i].dest);
if (set1 == set2)
continue;
else
{
if (checkIfCurrentEdgeIsCloserToPreviousCheapest(set1, i, edge,
cheapest))
cheapest[set1] = i;
if (checkIfCurrentEdgeIsCloserToPreviousCheapest(set2, i, edge,
cheapest))
cheapest[set2] = i;
}
}
for (int i = 0; i < V; i++)
{
if (cheapest[i] != -1)
{
int set1 = find(subsets, edge[cheapest[i]].src);
int set2 = find(subsets, edge[cheapest[i]].dest);
if (set1 == set2)
continue;
MSTweight += edge[cheapest[i]].weight;
resultPath.Add(edge[cheapest[i]].index);
Union(subsets, set1, set2);
numTrees--;
}
}
for (int i = 0; i < V; i++)
{
cheapest[i] = -1;
}
}
Universitas Sumatera Utara
A-68
totalJarak = MSTweight;
return;
}
privateboolcheckIfCurrentEdgeIsCloserToPreviousCheapest(intedgeIn
dex, int i, List edge, List cheapest)
{
varcond = false;
if (cheapest[edgeIndex] == -1)
cond = true;
if (cheapest[edgeIndex] != -1)
{
if (edge[cheapest[edgeIndex]].weight > edge[i].weight)
cond = true;
}
returncond;
}
Graph createGraph(int V, int E)
{
Graph graph = new Graph();
graph.V = V;
graph.E = E;
graph.edge = new List();
return graph;
}
int find(List subsets, int i)
{
if (subsets[i].parent != i)
subsets[i].parent =
find(subsets, subsets[i].parent);
return subsets[i].parent;
}
void Union(List subsets, int x, int y)
{
intxroot = find(subsets, x);
intyroot = find(subsets, y);
if (subsets[xroot].rank < subsets[yroot].rank)
subsets[xroot].parent = yroot;
else if (subsets[xroot].rank > subsets[yroot].rank)
subsets[yroot].parent = xroot;
else
{
subsets[yroot].parent = xroot;
subsets[xroot].rank++;
}
}
public List start(List edges, intnumOfVertices,
intnumOfEdges)
{
Universitas Sumatera Utara
A-69
Graph graph = createGraph(numOfVertices, numOfEdges);
graph.edge = edges;
boruvkaMST(graph);
returnresultPath;
}
public void displayEdges(List edges)
{
int i = 1;
foreach (var edge in edges)
{
Console.WriteLine(i + ") edge " + edge.src + "-" + edge.dest + "
: " + edge.weight);
i++;
}
}
}
}
KodeAlgoritmaPrim:
using System;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceJarakTerdekat
{
class Prim
{
public ListresultEdgeCollection;
public List edges;
publicint V;
public double totalJarak;
public Prim()
{
resultEdgeCollection = new List();
totalJarak = 0;
}
publicintminKey(List key, ListmstSet)
{
double min = double.PositiveInfinity;
intmin_index = 0;
for (int v = 0; v < V; v++)
if (mstSet[v] == false && key[v] < min)
{
Universitas Sumatera Utara
A-70
min = key[v];
min_index = v;
}
returnmin_index;
}
public void printMST(List parent, int n, List
graph)
{
Console.WriteLine("Edge
Weight\n");
for (int i = 1; i < V; i++)
{
Console.WriteLine(String.Format("{0} - {1}
{2} \n", parent[i],
i, graph[i][parent[i]]));
totalJarak += graph[i][parent[i]];
addEdgeIndexToResult(parent[i], i);
}
}
public void addEdgeIndexToResult(intsrc, intdest)
{
foreach (var edge in edges)
{
if (((edge.src == src) && (edge.dest == dest)) || ((edge.src ==
dest) && (edge.dest == src)))
{
resultEdgeCollection.Add(edge.index);
}
}
}
public void primMST(List graph)
{
List parent = new List();
List key = new List();
ListmstSet = new List();
parent.Add(0);
for (int i = 0; i < V; i++)
{
key.Add(0);
mstSet.Add(false);
key[i] = double.PositiveInfinity;
mstSet[i] = false;
}
key[0] = 0;
parent[0] = -1;
for (int count = 0; count < V - 1; count++)
{
int u = minKey(key, mstSet);
mstSet[u] = true;
for (int v = 0; v < V; v++)
{
Universitas Sumatera Utara
A-71
parent.Add(0);
if (((graph[u][v] > 0) ? true : false) &&mstSet[v] == false &&
graph[u][v] < key[v])
{
parent[v] = u;
key[v] = graph[u][v];
}
}
}
printMST(parent, V, graph);
}
public List main(List edges,
ListgraphCollection, int V)
{
this.edges = edges;
this.V = V;
primMST(graphCollection);
returnresultEdgeCollection;
}
}
}
Universitas Sumatera Utara
B-1
CURRICULUM VITAE
Data Pribadi
Nama
Tempat/TanggalLahir
Tinggi/ BeratBadan
Agama
AlamatSekarang
:
:
:
:
:
YohanesSimare Mare
Jakarta/ 19 Mei 1994
168 cm/ 70 kg
Kristen Protestan
Jl. Sei Padang Gg. Saudara
No. 10 Medan
Alamat Orang Tua
:
Jl. HuseinSastranegaraRt.03
Rw. 02 No. 18 Tangerang
Telp/ Hp
:
082299608784
Email
:
yohanesmaremare@gmail.com
-------------------------------------------------------------------------------------------------------RiwayatPendidikan
[2012 – 2016]
: S1 IlmuKomputerUniversitas Sumatera Utara, Medan
[2009 – 2012]
: SMA Negeri 84Jakarta
[2006 – 2009]
:SMP Negeri 169Jakarta
[2001 – 2006]
: SD NegeriPegadungan 06 Jakarta
[2001 – 2006] : SD Santa Patricia Tangerang
-------------------------------------------------------------------------------------------------------Keahlian
KeahlianKomputer :
Pemrograman
: C#, PHP
Database
: MySQL
Desain
: Coreldraw, Adobe Photoshop
Multimedia
: Adobe Flash, Adobe Illustrator
Perkantoran
: Microsoft Office
-------------------------------------------------------------------------------------------------------Kursus yang diikuti
Briton International English School
Universitas Sumatera Utara
B-2
-------------------------------------------------------------------------------------------------------PengalamanOrganisasi
[2006 – 2009] Anggota PMR SMP Negeri 169 Jakarta
[2019 – 2011] Anggota PMR SMA Negeri 84 Jakarta
--------------------------------------------------------------------------------------------------------
PengalamanKepanitiaan
[2012]
Anggota Dana Porseni 2014 IlmuKomputerUniversitas
[2014]
AnggotaKesehatan PMB 2014 IlmuKomputerUniversitas
--------------------------------------------------------------------------------------------------------
Seminar
[2013]
Seminar NasionalGeloraLiterasiTeknologiInformasi&Komunikasi “Si GELITIK”
[2014]
Seminar NasionalLiterasiInformasi “SENůRůI”
[2014]
Seminar Open BTS "ICONS"
Universitas Sumatera Utara
LAMPIRAN
LISTING PROGRAM
KodeůlgoritmaBor vka:
using System;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceJarakTerdekat
{
classBoruvka
{
public ListresultPath;
public double totalJarak;
publicBoruvka()
{
resultPath = new List();
totalJarak = 0;
}
class Graph
{
publicint V, E;
public List edge = new List();
};
class subset
{
publicint parent;
publicint rank;
};
voidboruvkaMST(Graph graph)
{
int V = graph.V;
int E = graph.E;
List edge = graph.edge;
List subsets = new List();
List cheapest = new List();
cheapest.Add(-1);
Universitas Sumatera Utara
A-67
for (int v = 0; v < V; ++v)
{
subsets.Add(new subset());
subsets[v].parent = v;
subsets[v].rank = 0;
cheapest.Add(-1);
}
intnumTrees = V;
doubleMSTweight = 0;
while (numTrees> 1)
{
for (int i = 0; i < E; i++)
{
int set1 = find(subsets, edge[i].src);
int set2 = find(subsets, edge[i].dest);
if (set1 == set2)
continue;
else
{
if (checkIfCurrentEdgeIsCloserToPreviousCheapest(set1, i, edge,
cheapest))
cheapest[set1] = i;
if (checkIfCurrentEdgeIsCloserToPreviousCheapest(set2, i, edge,
cheapest))
cheapest[set2] = i;
}
}
for (int i = 0; i < V; i++)
{
if (cheapest[i] != -1)
{
int set1 = find(subsets, edge[cheapest[i]].src);
int set2 = find(subsets, edge[cheapest[i]].dest);
if (set1 == set2)
continue;
MSTweight += edge[cheapest[i]].weight;
resultPath.Add(edge[cheapest[i]].index);
Union(subsets, set1, set2);
numTrees--;
}
}
for (int i = 0; i < V; i++)
{
cheapest[i] = -1;
}
}
Universitas Sumatera Utara
A-68
totalJarak = MSTweight;
return;
}
privateboolcheckIfCurrentEdgeIsCloserToPreviousCheapest(intedgeIn
dex, int i, List edge, List cheapest)
{
varcond = false;
if (cheapest[edgeIndex] == -1)
cond = true;
if (cheapest[edgeIndex] != -1)
{
if (edge[cheapest[edgeIndex]].weight > edge[i].weight)
cond = true;
}
returncond;
}
Graph createGraph(int V, int E)
{
Graph graph = new Graph();
graph.V = V;
graph.E = E;
graph.edge = new List();
return graph;
}
int find(List subsets, int i)
{
if (subsets[i].parent != i)
subsets[i].parent =
find(subsets, subsets[i].parent);
return subsets[i].parent;
}
void Union(List subsets, int x, int y)
{
intxroot = find(subsets, x);
intyroot = find(subsets, y);
if (subsets[xroot].rank < subsets[yroot].rank)
subsets[xroot].parent = yroot;
else if (subsets[xroot].rank > subsets[yroot].rank)
subsets[yroot].parent = xroot;
else
{
subsets[yroot].parent = xroot;
subsets[xroot].rank++;
}
}
public List start(List edges, intnumOfVertices,
intnumOfEdges)
{
Universitas Sumatera Utara
A-69
Graph graph = createGraph(numOfVertices, numOfEdges);
graph.edge = edges;
boruvkaMST(graph);
returnresultPath;
}
public void displayEdges(List edges)
{
int i = 1;
foreach (var edge in edges)
{
Console.WriteLine(i + ") edge " + edge.src + "-" + edge.dest + "
: " + edge.weight);
i++;
}
}
}
}
KodeAlgoritmaPrim:
using System;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceJarakTerdekat
{
class Prim
{
public ListresultEdgeCollection;
public List edges;
publicint V;
public double totalJarak;
public Prim()
{
resultEdgeCollection = new List();
totalJarak = 0;
}
publicintminKey(List key, ListmstSet)
{
double min = double.PositiveInfinity;
intmin_index = 0;
for (int v = 0; v < V; v++)
if (mstSet[v] == false && key[v] < min)
{
Universitas Sumatera Utara
A-70
min = key[v];
min_index = v;
}
returnmin_index;
}
public void printMST(List parent, int n, List
graph)
{
Console.WriteLine("Edge
Weight\n");
for (int i = 1; i < V; i++)
{
Console.WriteLine(String.Format("{0} - {1}
{2} \n", parent[i],
i, graph[i][parent[i]]));
totalJarak += graph[i][parent[i]];
addEdgeIndexToResult(parent[i], i);
}
}
public void addEdgeIndexToResult(intsrc, intdest)
{
foreach (var edge in edges)
{
if (((edge.src == src) && (edge.dest == dest)) || ((edge.src ==
dest) && (edge.dest == src)))
{
resultEdgeCollection.Add(edge.index);
}
}
}
public void primMST(List graph)
{
List parent = new List();
List key = new List();
ListmstSet = new List();
parent.Add(0);
for (int i = 0; i < V; i++)
{
key.Add(0);
mstSet.Add(false);
key[i] = double.PositiveInfinity;
mstSet[i] = false;
}
key[0] = 0;
parent[0] = -1;
for (int count = 0; count < V - 1; count++)
{
int u = minKey(key, mstSet);
mstSet[u] = true;
for (int v = 0; v < V; v++)
{
Universitas Sumatera Utara
A-71
parent.Add(0);
if (((graph[u][v] > 0) ? true : false) &&mstSet[v] == false &&
graph[u][v] < key[v])
{
parent[v] = u;
key[v] = graph[u][v];
}
}
}
printMST(parent, V, graph);
}
public List main(List edges,
ListgraphCollection, int V)
{
this.edges = edges;
this.V = V;
primMST(graphCollection);
returnresultEdgeCollection;
}
}
}
Universitas Sumatera Utara
B-1
CURRICULUM VITAE
Data Pribadi
Nama
Tempat/TanggalLahir
Tinggi/ BeratBadan
Agama
AlamatSekarang
:
:
:
:
:
YohanesSimare Mare
Jakarta/ 19 Mei 1994
168 cm/ 70 kg
Kristen Protestan
Jl. Sei Padang Gg. Saudara
No. 10 Medan
Alamat Orang Tua
:
Jl. HuseinSastranegaraRt.03
Rw. 02 No. 18 Tangerang
Telp/ Hp
:
082299608784
:
yohanesmaremare@gmail.com
-------------------------------------------------------------------------------------------------------RiwayatPendidikan
[2012 – 2016]
: S1 IlmuKomputerUniversitas Sumatera Utara, Medan
[2009 – 2012]
: SMA Negeri 84Jakarta
[2006 – 2009]
:SMP Negeri 169Jakarta
[2001 – 2006]
: SD NegeriPegadungan 06 Jakarta
[2001 – 2006] : SD Santa Patricia Tangerang
-------------------------------------------------------------------------------------------------------Keahlian
KeahlianKomputer :
Pemrograman
: C#, PHP
Database
: MySQL
Desain
: Coreldraw, Adobe Photoshop
Multimedia
: Adobe Flash, Adobe Illustrator
Perkantoran
: Microsoft Office
-------------------------------------------------------------------------------------------------------Kursus yang diikuti
Briton International English School
Universitas Sumatera Utara
B-2
-------------------------------------------------------------------------------------------------------PengalamanOrganisasi
[2006 – 2009] Anggota PMR SMP Negeri 169 Jakarta
[2019 – 2011] Anggota PMR SMA Negeri 84 Jakarta
--------------------------------------------------------------------------------------------------------
PengalamanKepanitiaan
[2012]
Anggota Dana Porseni 2014 IlmuKomputerUniversitas
[2014]
AnggotaKesehatan PMB 2014 IlmuKomputerUniversitas
--------------------------------------------------------------------------------------------------------
Seminar
[2013]
Seminar NasionalGeloraLiterasiTeknologiInformasi&Komunikasi “Si GELITIK”
[2014]
Seminar NasionalLiterasiInformasi “SENůRůI”
[2014]
Seminar Open BTS "ICONS"
Universitas Sumatera Utara