Implimentasi dan Perbandingan Algoritma L-Deque dan Algoritma Floyd Dalam Pencarian Foto Studio Terdekat di Kota Medan
67
LISTING PROGRAM
Kode Program Algoritma L-Deque:
Public Class Ldeque
Public graph As New List(Of List(Of edge_))()
Private shortestDistances As New List(Of Double)()
Private predecessorVertex As New List(Of Double)()
Public totalJarak As Double
Public path As List(Of Integer)
Private watch As New Classes.Stopwatch()
Public elapsedTimeMs As Double = 0
Public Sub New(graph As List(Of List(Of edge_)))
Me.graph = graph
path = New List(Of Integer)()
End Sub
Public Sub LQueue(startIndex As Integer, toIndex As Integer)
watch.start()
path.Add(toIndex)
Dim INF As Double = Double.PositiveInfinity
Dim deque As New Deque()
For Each pair As List(Of edge_) In graph
shortestDistances.Add(INF)
predecessorVertex.Add(-1)
Next
shortestDistances(startIndex) = 0
deque.PushBack(startIndex)
While deque.Count 0
Dim u As Integer = deque.PopFront(Of Integer)
For Each pair As edge_ In graph(u)
Dim v As Integer = pair.toIndex
If shortestDistances(v) > shortestDistances(u) +
pair.cost Then
If Not deque.Contains(v) Then
If (shortestDistances(v) =
Double.PositiveInfinity) Then
deque.PushBack(v)
Else
deque.PushFront(v)
End If
End If
shortestDistances(v) = shortestDistances(u) +
pair.cost
predecessorVertex(v) = u
End If
Next
End While
getPath(startIndex, toIndex)
totalJarak = shortestDistances(toIndex)
elapsedTimeMs = watch.[stop]()
End Sub
Public Sub getPath(u As Integer, v As Integer)
Universitas Sumatera Utara
68
Dim k As Double
k = predecessorVertex(v)
If k = -1 OrElse u = v Then
Return
End If
path.Add(CInt(Math.Truncate(k)))
getPath(u, CInt(Math.Truncate(k)))
End Sub
End Class
Kode Program Algoritma Floyd :
Public Class Floyd
Public P As List(Of List(Of Double))
Public M As List(Of List(Of Double))
Public totalJarak As Double
Public startIndex As Integer
Public endIndex As Integer
Public result As List(Of Integer)
Public N As Integer
Private watch As New Classes.Stopwatch()
Public elapsedTimeMs As Double = 0
Public Sub init(inputTable As List(Of List(Of Double)), N As
Double)
Me.N = CInt(Math.Truncate(N))
P = New List(Of List(Of Double))()
result = New List(Of Integer)()
M = inputTable
For i As Integer = 0 To N - 1
P.Add(New List(Of Double)())
For j As Integer = 0 To N - 1
P(i).Add(-1)
Next
Next
End Sub
Public Function calculateShortestPath(startIndex As Integer,
endIndex As Integer) As List(Of Integer)
Me.startIndex = startIndex
Me.endIndex = endIndex
watch.start()
result.Add(startIndex)
FloydAlgo(M)
getPath(startIndex, endIndex)
Universitas Sumatera Utara
69
If totalJarak Double.PositiveInfinity Then
result.Add(endIndex)
End If
elapsedTimeMs = watch.[stop]()
Return result
End Function
Public Sub getPath(u As Integer, v As Integer)
Dim k As Double
k = P(u)(v)
If k = -1 Then
Return
End If
getPath(u, CInt(Math.Truncate(k)))
result.Add(CInt(Math.Truncate(k)))
getPath(CInt(Math.Truncate(k)), v)
End Sub
Public Function FloydAlgo(M As List(Of List(Of Double))) As
List(Of List(Of Double))
For k As Integer = 0 To N - 1
For i As Integer = 0 To N - 1
For j As Integer = 0 To N - 1
If M(i)(k) + M(k)(j) < M(i)(j) Then
M(i)(j) = M(i)(k) + M(k)(j)
P(i)(j) = k
End If
Next
Next
Next
totalJarak = M(startIndex)(endIndex)
Return M
End Function
Public Function min(i As Integer, j As Integer) As Integer
If i > j Then
Return j
End If
Return i
End Function
End Class
Universitas Sumatera Utara
70
CURRICULUM VITAE
Data Diri
Nama
: Kevin Irfanda
Tempat/Tanggal Lahir
: Medan, 20 November 1994
Alamat Sekarang
Medan 20127
: Jl. Binjai km 9,1 No. 17 Kp. Lalang,
Alamat Orang Tua
: Jl. Binjai km 9,1 No. 17 Kp. Lalang,
Medan 20127
Agama
: Islam
Jenis Kelamin
: Laki-Laki
Nomor Hp
: 082362675907
Email
: kevinirfanda20@gmail.com
Riwayat Pendidikan
2000 – 2006
: SD Swasta Supriyadi
2006 – 2009
: SMP Negeri 30 Medan
2009 – 2012
: SMK Negeri 9 Medan
2012 – Sekarang
: S1 Ilmu Komputer Universitas Sumatera Utara, Medan
Keahlian
Bahasa
: Indonesia, Inggris
Bahasa Pemrograman : C#, Visual Basic
DBMS
: MySQL
Multimedia
: Adobe Flash
Design
: Photoshop
Perkantoran
: Microsoft Office, Microsoft Excel
Universitas Sumatera Utara
71
Pengalaman Kepanitiaan
2012
: Anggota Publikasi Dekorasi dan Dokumentasi Dies Natalis IMILKOM
2013
: Anggota Dana Ilkom Goes To School 2013
2014
: Anggota Publikasi Dekorasi dan Dokumentasi Porseni IMILKOM
2014
: Anggota Publikasi Dekorasi dan Dokumentasi PMB 2014
2014
: Anggota Acara Meet & Greet Kam Rabbani
2014
: Anggota Acara ARTechno 2014
2014
: Anggota Acara Science Competition 2014
Pengalaman Organisasi
2014 – 2015
: Anggota Departemen Komunikasi dan Informasi Ikatan
Mahasiswa Ilmu Komputer USU (IMILKOM USU)
2015 – 2016
: Sekretaris Departemen Komunikasi dan Informasi Ikatan
Mahasiswa Ilmu Komputer USU (IMILKOM USU)
Pengalaman Bekerja
2011
: Praktik Kerja Industri di PT. Telekomunikasi Indonesia, Tbk
2015
: Praktik Kerja Lapangan di PT. Pertamina (Persero)
Seminar
2014
: Seminar Nasional Literasi Informasi “SENARAI”
Universitas Sumatera Utara
LISTING PROGRAM
Kode Program Algoritma L-Deque:
Public Class Ldeque
Public graph As New List(Of List(Of edge_))()
Private shortestDistances As New List(Of Double)()
Private predecessorVertex As New List(Of Double)()
Public totalJarak As Double
Public path As List(Of Integer)
Private watch As New Classes.Stopwatch()
Public elapsedTimeMs As Double = 0
Public Sub New(graph As List(Of List(Of edge_)))
Me.graph = graph
path = New List(Of Integer)()
End Sub
Public Sub LQueue(startIndex As Integer, toIndex As Integer)
watch.start()
path.Add(toIndex)
Dim INF As Double = Double.PositiveInfinity
Dim deque As New Deque()
For Each pair As List(Of edge_) In graph
shortestDistances.Add(INF)
predecessorVertex.Add(-1)
Next
shortestDistances(startIndex) = 0
deque.PushBack(startIndex)
While deque.Count 0
Dim u As Integer = deque.PopFront(Of Integer)
For Each pair As edge_ In graph(u)
Dim v As Integer = pair.toIndex
If shortestDistances(v) > shortestDistances(u) +
pair.cost Then
If Not deque.Contains(v) Then
If (shortestDistances(v) =
Double.PositiveInfinity) Then
deque.PushBack(v)
Else
deque.PushFront(v)
End If
End If
shortestDistances(v) = shortestDistances(u) +
pair.cost
predecessorVertex(v) = u
End If
Next
End While
getPath(startIndex, toIndex)
totalJarak = shortestDistances(toIndex)
elapsedTimeMs = watch.[stop]()
End Sub
Public Sub getPath(u As Integer, v As Integer)
Universitas Sumatera Utara
68
Dim k As Double
k = predecessorVertex(v)
If k = -1 OrElse u = v Then
Return
End If
path.Add(CInt(Math.Truncate(k)))
getPath(u, CInt(Math.Truncate(k)))
End Sub
End Class
Kode Program Algoritma Floyd :
Public Class Floyd
Public P As List(Of List(Of Double))
Public M As List(Of List(Of Double))
Public totalJarak As Double
Public startIndex As Integer
Public endIndex As Integer
Public result As List(Of Integer)
Public N As Integer
Private watch As New Classes.Stopwatch()
Public elapsedTimeMs As Double = 0
Public Sub init(inputTable As List(Of List(Of Double)), N As
Double)
Me.N = CInt(Math.Truncate(N))
P = New List(Of List(Of Double))()
result = New List(Of Integer)()
M = inputTable
For i As Integer = 0 To N - 1
P.Add(New List(Of Double)())
For j As Integer = 0 To N - 1
P(i).Add(-1)
Next
Next
End Sub
Public Function calculateShortestPath(startIndex As Integer,
endIndex As Integer) As List(Of Integer)
Me.startIndex = startIndex
Me.endIndex = endIndex
watch.start()
result.Add(startIndex)
FloydAlgo(M)
getPath(startIndex, endIndex)
Universitas Sumatera Utara
69
If totalJarak Double.PositiveInfinity Then
result.Add(endIndex)
End If
elapsedTimeMs = watch.[stop]()
Return result
End Function
Public Sub getPath(u As Integer, v As Integer)
Dim k As Double
k = P(u)(v)
If k = -1 Then
Return
End If
getPath(u, CInt(Math.Truncate(k)))
result.Add(CInt(Math.Truncate(k)))
getPath(CInt(Math.Truncate(k)), v)
End Sub
Public Function FloydAlgo(M As List(Of List(Of Double))) As
List(Of List(Of Double))
For k As Integer = 0 To N - 1
For i As Integer = 0 To N - 1
For j As Integer = 0 To N - 1
If M(i)(k) + M(k)(j) < M(i)(j) Then
M(i)(j) = M(i)(k) + M(k)(j)
P(i)(j) = k
End If
Next
Next
Next
totalJarak = M(startIndex)(endIndex)
Return M
End Function
Public Function min(i As Integer, j As Integer) As Integer
If i > j Then
Return j
End If
Return i
End Function
End Class
Universitas Sumatera Utara
70
CURRICULUM VITAE
Data Diri
Nama
: Kevin Irfanda
Tempat/Tanggal Lahir
: Medan, 20 November 1994
Alamat Sekarang
Medan 20127
: Jl. Binjai km 9,1 No. 17 Kp. Lalang,
Alamat Orang Tua
: Jl. Binjai km 9,1 No. 17 Kp. Lalang,
Medan 20127
Agama
: Islam
Jenis Kelamin
: Laki-Laki
Nomor Hp
: 082362675907
: kevinirfanda20@gmail.com
Riwayat Pendidikan
2000 – 2006
: SD Swasta Supriyadi
2006 – 2009
: SMP Negeri 30 Medan
2009 – 2012
: SMK Negeri 9 Medan
2012 – Sekarang
: S1 Ilmu Komputer Universitas Sumatera Utara, Medan
Keahlian
Bahasa
: Indonesia, Inggris
Bahasa Pemrograman : C#, Visual Basic
DBMS
: MySQL
Multimedia
: Adobe Flash
Design
: Photoshop
Perkantoran
: Microsoft Office, Microsoft Excel
Universitas Sumatera Utara
71
Pengalaman Kepanitiaan
2012
: Anggota Publikasi Dekorasi dan Dokumentasi Dies Natalis IMILKOM
2013
: Anggota Dana Ilkom Goes To School 2013
2014
: Anggota Publikasi Dekorasi dan Dokumentasi Porseni IMILKOM
2014
: Anggota Publikasi Dekorasi dan Dokumentasi PMB 2014
2014
: Anggota Acara Meet & Greet Kam Rabbani
2014
: Anggota Acara ARTechno 2014
2014
: Anggota Acara Science Competition 2014
Pengalaman Organisasi
2014 – 2015
: Anggota Departemen Komunikasi dan Informasi Ikatan
Mahasiswa Ilmu Komputer USU (IMILKOM USU)
2015 – 2016
: Sekretaris Departemen Komunikasi dan Informasi Ikatan
Mahasiswa Ilmu Komputer USU (IMILKOM USU)
Pengalaman Bekerja
2011
: Praktik Kerja Industri di PT. Telekomunikasi Indonesia, Tbk
2015
: Praktik Kerja Lapangan di PT. Pertamina (Persero)
Seminar
2014
: Seminar Nasional Literasi Informasi “SENARAI”
Universitas Sumatera Utara