Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
For j = 1 To frmPeta.theLineCollection.Count If frmPeta.theLineCollectionj.sFrom =
frmPeta.theBlockCollectioni.TagID Then toIndex =
frmPeta.theBlockCollection.getIndexFromTagfrmPeta.theLineCollection j.sTo
flxMap.col = toIndex flxMap.Text = frmPeta.theLineCollectionj.sCaption
If flxMap.Text = Then flxMap.Text = 1 flxMap.CellForeColor = vbRed
flxMap.CellFontBold = True End If
Next j Next i
ReDim jarakMe.flxMap.Rows - 1, Me.flxMap.Rows - 1 ReDim visibMe.flxMap.Rows - 1, Me.flxMap.Rows - 1
For i = 1 To Me.flxMap.Rows - 1 For j = 1 To Me.flxMap.Cols - 1
jaraki, j = flxMap.TextMatrixi, j If jaraki, j = 0 Then
visibi, j = 0 Else
visibi, j = Round1 jaraki, j, 2 End If
Next Next
End Sub
3.2 Prosedure Algoritma Greedy
Berikut prosedure yang digunakan pada algoritma Greedy:
Dim src As Integer Dim dest As Integer
src = getIndexOfTabNamesFrom dest = getIndexOfTabNamesTo
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
If src = -1 Or dest = -1 Then MsgBox something wrong
Exit Sub End If
Dim ketemu as boolen Dim CC as integer
Dim Lc as integer Dim Ltemp as integer
LC1 = src CC1=LC1
Counter=1 While LC null and ketemu true do
CCcounter=LCcounter LC1=0
If CCcountre 0 then For a = 0 uboundcc
{mulai penelusuran semua child} If cca Ltemp then
LCcounter+1=cca Ltemp=CC
Endif endif
LPubound+1=CCcounter+1 if adjlpa,b 0 then
ketemu true endif
Loop
3.3 Flowchart Algoritma Greedy
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
Gambar 3.5 Flowchart Algoritma Greedy
3.4 Implementasi Algoritma Dijkstra
Implementasi algoritma Dijkstra dirancang dalam bahasa pemograman Visual Basic 6.0. Berikut adalah tahap proses implementasi algoritma Dijkstra:
1. Input Graph Mulai
Tentukan Vs dan Vt
Jalur=0 Tentukan vsV1 dan Cari V2
Bandingkan Lintasan Kesemua verteks terhubung
Vt Tercapai
Jalur Verteks Tujuan Lintasan
Terpendek Ditemuka n
Selesai
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
2. Proses Graph Pada algoritma Dijkstra node digunakan, karena algoritma Dijkstra menggunakan
diagram pohontree untuk penentuan jalur lintasan terpendek dan menggunakan graph yang berarah. Algoritma Dijkstra mencari jarak terpendek dari node asal ke
node terdekatnya, kemudian ke node berikutnya, dan seterusnya. Secara umum sebelum dilakukan I iterasi, algoritma sudah mengidentifikasi jarak terdekat dari i-1
node terdekatnya. Jika seluruh node berbobot tertentu yang positif, maka node terdekat berikutnya dari node asal dapat ditemukan selama node berdekatan dengan
node Ti. Kumpulan node yang berdekatan dengan node di Ti inilah yang merupakan kandidat dari algoritma Dijkstra untuk memilih node berikutnya dari node asal.
Adapun gambar dari graph yang akan diselesaikan dengan algoritma Dijkstra adalah sebagai berikut:
Gambar 3.6 Graph Untuk Algoritma Dijkstra
Langkah-langkah untuk menentukan jarak terpendek dari A ke J dengan menggunakan algoritma Dijkstra adalah sebagai berikut:
1. Pada awalnya status dari node yang belum terpilih diinisialisasikan dengan ‘0’ dan yang sudah terpilih diinisialisasi dengan ‘1’ dimulai dari node A.
2. Tentukan bobot dari node yang langsung berhubungan dengan node sumber yaitu node A, seperti: dari node A ke node B=2, dari node A ke node C=8, dari
node A ke node D=3, dan untuk node E, F, G, H, I, J diinisialisasi dengan ‘-‘ karena tidak ada lintasan arc yang menghubungkan secara langsung dengan
node A.
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
3. Predecessor node sumber dari node A, B, C, D adalah A, karena jarak dihitung dari node A, sehingga node A disebut sebagai predecessor node
sumber, sedangkan untuk node F, G, H, I, J diinisialisasi dengan ‘-‘ dikarenakan tidak ada lintasan arc yang langsung menghubungkan dari node
A, sehingga jaraknya tidak ada.
Tabel 3.1 Hasil Iterasi Ke-1
Node A
B C
D E
F G
H I
J Status
1 Bobot
- 2
8 3
- -
- -
- -
Predecessor A A
A A
- -
- -
- -
A
Gambar 3.7 Node Terpilih Pada Iterasi ke-1
Dari Tabel 3.1 pilih node yang memiliki bobot yang paling kecil dan status nya masih ‘0’, yaitu node B. Untuk itu status node B menjadi ‘1’ dan predecessor-nya masih
tetap A, dan node yang lain predecessor-nya masih sama. Jika node B sudah terpilih, maka ada perubahan pada bobot node C, di mana awalnya bernilai 8 sekarang menjadi
7. Bobot 8 diperoleh dari node yang langsung bergerak dari A ke C, padahal terdapat jalur yang lebih pendek yaitu melalui B, dengan bobot 7, sehingga predecessor pada
C menjadi B, karena node B sudah terpilih, selanjutnya diperoleh node E dengan bobot 4 dan node G dengan bobot 6, predecessor E dan G adalah B, di mana untuk
mencapai node E dan G dari node A bisa melalui node B. Sehingga diperoleh:
Tabel 3.2 Hasil Iterasi Ke-2
Node A
B C
D E
F G
H I
J Status
1 1
Bobot -
2 7
3 4
- 6
- -
- Predecessor A
A B
A B
- B
- -
-
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
A
B
Gambar 3.8 Node terpilih pada Iterasi ke-2
Dari Tabel 3.2 di didapatkan bahwa node D memiliki bobot yang paling kecil, sehingga statusnya akan berubah menjadi ‘1’ dan predecessor-nya masih tetap A.
Sehingga diperoleh:
Tabel 3.3 Hasil Iterasi Ke-3
Node A
B C
D E
F G
H I
J Status
1 1
1 Bobot
- 2
7 3
4 -
6 -
- -
Predecessor A A
B A
B -
B -
- -
A
B D
Gambar 3.9 Node terpilih pada Iterasi ke-3
Dari Tabel 3.3 didapatkan bahwa node E memiliki bobot yang paling kecil, sehingga statusnya akan berubah menjadi ‘1’. Jika node E sudah terpilih, maka node F
mempunyai bobot 13, node H bobotnya 11 dan node J bobotnya 9. Untuk mencapai node F, H dan node J dari node A bisa melalui node B, kemudian melalui node E
dengan predecessor-nya berubah menjadi E. Sehingga diperoleh:
Tabel 3.4 Hasil Iterasi Ke-4
Node A
B C
D E
F G
H I
J Status
1 1
1 1
Bobot -
2 7
3 4
13 6
11 -
9 Predecessor A
A B
A B
E B
E -
E
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
Gambar 3.10 Node terpilih pada Iterasi ke-4
Dari Tabel 3.4 didapatkan bahwa node G memiliki bobot yang paling kecil, sehingga statusnya akan berubah menjadi ‘1’, predecessor-nya masih tetap B. Jika node G
sudah terpilih, maka ada perubahan bobot pada node F dengan bobot 13 berubah menjadi 12 dan predecessor E menjadi G. Sehingga diperoleh:
Tabel 3.5 Hasil Iterasi Ke-5
Node A
B C
D E
F G
H I
J Status
1 1
1 1
1 Bobot
- 2
7 3
4 12
6 11
- 9
Predecessor A A
B A
B G
B E
- E
Gambar 3.11 Node terpilih pada Iterasi ke-5
Dari Tabel 3.5 didapatkan bahwa node C memiliki bobot yang paling kecil, sehingga statusnya akan berubah menjadi ‘1’, predecessor-nya masih tetap B dengan bobot 7.
Sehingga diperoleh:
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
Tabel 3.6 Hasil Iterasi Ke-6
Node A
B C
D E
F G
H I
J Status
1 1
1 1
1 1
Bobot -
2 7
3 4
12 6
11 -
9 Predecessor A
A B
A B
G B
E -
E
Gambar 3.12 Node terpilih pada Iterasi ke-6
Dari Tabel 3.6 didapatkan bahwa node J memiliki bobot yang paling kecil, sehingga statusnya akan berubah menjadi ‘1’ dengan predecessor-nya E. Jika node J sudah
terpilih, maka diperoleh node I dengan bobot 19 yang bersumber dari node ABEJI. Sehingga diperoleh:
Tabel 3.7 Hasil Iterasi Ke-7
Node A
B C
D E
F G
H I
J Status
1 1
1 1
1 1
1 Bobot
- 2
7 3
4 12
6 11
19 9
Predecessor A A
B A
B G
B E
J E
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
Gambar 3.13 Node terpilih pada Iterasi ke-7
Dari Tabel 3.7 didapatkan bahwa node H memiliki bobot yang paling kecil, sehingga statusnya akan berubah menjadi ‘1’ dengan predecessor-nya E. Jika node J sudah
terpilih, maka diperoleh node I dengan bobot 19 berubah bobotnya menjadi 15 dengan predecessor-nya H yang bersumber dari node ABEHI. Sehingga diperoleh:
Tabel 3.8 Hasil Iterasi Ke-8
Node A
B C
D E
F G
H I
J Status
1 1
1 1
1 1
1 1
Bobot -
2 7
3 4
12 6
11 15
9 Predecessor A
A B
A B
G B
E H
E
Gambar 3.14 Node terpilih pada Iterasi ke-8
Dari Tabel 3.8 didapatkan bahwa node F memiliki bobot yang paling kecil, sehingga statusnya akan berubah menjadi ‘1’, predecessor-nya masih tetap G dengan bobot 12.
Sehingga diperoleh:
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
Tabel 3.9 Hasil Iterasi Ke-9
Node A
B C
D E
F G
H I
J Status
1 1
1 1
1 1
1 1
1 Bobot
- 2
7 3
4 12
6 11
15 9
Predecessor A A
B A
B G
B E
H E
Gambar 3.15 Node terpilih pada Iterasi ke-9
Semua node telah terpilih dan hanya tinggal node I yang belum terpilih, selanjutnya status node I akan berubah menjadi ‘1’, predecessor-nya masih tetap H dengan bobot
15. Sehingga diperoleh:
Tabel 3.10 Hasil Iterasi Ke-10
Node A
B C
D E
F G
H I
J Status
1 1
1 1
1 1
1 1
1 1
Bobot -
2 7
3 4
12 6
11 15
9 Predecessor A
A B
A B
G B
E H
E
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
Gambar 3.16 Node terpilih pada Iterasi ke-10
Hasil dari seluruh tabel adalah sebagai berikut:
Tabel 3.11 Hasil dari seluruh tabel Iterasi Ke 1
Node A
B C
D E
F G
H I
J
Status 1
Bobot -
2 8
3 -
- -
- -
- Predecessor A
A A
A -
- -
- -
-
Iterasi Ke 2 Node
A B
C D
E F
G H
I J
Status 1
1 Bobot
- 2
7 3
4 -
6 -
- -
Predecessor A A
B A
B -
B -
- -
Iterasi Ke 3 Node
A B
C D
E F
G H
I J
Status 1
1 1
Bobot -
2 7
3 4
- 6
- -
- Predecessor A
A B
A B
- B
- -
-
Iterasi Ke 4
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
Node A
B C
D E
F G
H I
J
Status 1
1 1
1 Bobot
- 2
7 3
4 13
6 11
- 9
Predecessor A A
B A
B E
B E
- E
Iterasi Ke 5 Node
A B
C D
E F
G H
I J
Status 1
1 1
1 1
Bobot -
2 7
3 4
12 6
11 -
9 Predecessor A
A B
A B
G B
E -
E
Iterasi Ke 6 Node
A B
C D
E F
G H
I J
Status 1
1 1
1 1
1 Bobot
- 2
7 3
4 12
6 11
- 9
Iterasi Ke 7 Node
A B
C D
E F
G H
I J
Status 1
1 1
1 1
1 1
Bobot -
2 7
3 4
12 6
11 19
9 Predecessor A
A B
A B
G B
E J
E
Iterasi Ke 8 Node
A B
C D
E F
G H
I J
Status 1
1 1
1 1
1 1
1 Bobot
- 2
7 3
4 12
6 11
15 9
Predecessor A A
B A
B G
B E
H E
Iterasi Ke 9 Node
A B
C D
E F
G H
I J
Status 1
1 1
1 1
1 1
1 1
Bobot -
2 7
3 4
12 6
11 15
9 Predecessor A
A B
A B
G B
E H
E
Iterasi Ke 10 Node
A B
C D
E F
G H
I J
Status 1
1 1
1 1
1 1
1 1
1
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
Bobot -
2 7
3 4
12 6
11 15
9 Predecessor A
A B
A B
G B
E H
E
Program akan berhenti karena semua node sudah terpilih. Sehingga akan menghasilkan jalur terpendek dari node A ke setiap node yang ada. Untuk melihat
jalur mana yang terpilih dapat ditelusuri dari predecessor-nya, Sehingga akan didapat:
A B : A - B
: 2 A C
: A - B - C : 7
A D : A - D
: 3 A E
: A - B - E : 4
A F : A - B - G – F
: 12 AG
: A – B – G : 6
AH : A – B – E – H
: 11 AI
: A – B – E – H – I : 15
AJ : A – B – E – - J
: 9
3.4.1 Input Graph
Proses input graph dilakukan dengan cara menggambar titik dan jalan yang
menghubungkan setiap titik pada halaman graph. Selanjutnya adalah membuat caption dari setiap titik yang akan menjadi nama titik tersebut dan caption pada jalan
akan menjadi jarak antara titik yang satu dengan yang lainnya.
1. Prosedure untuk membuat titik:
Private Sub mnuTambahTItik_Click theBlockCollection.AddShape 3, theBlockCollection.getFreeTagID
End Sub
2. Prosedure untuk membuat jalangaris tanpa panah:
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
Private Sub mnuJoinLine_Click If PREV_SELECTED_SHAPE -1 And SELECTED_SHAPE -1 Then
theLineCollection.AddLine frmPeta.shpPREV_SELECTED_SHAPE.Tag,
frmPeta.shpSELECTED_SHAPE.Tag, False Else
MsgBox Two objects should be selected End If
End Sub
3. Menambah caption titiknode dengan posisi di tengah:
Private Sub mnTbhCaptionDiTengah_Click If SELECTED_SHAPE -1 Then
Dim s As String s = InputBoxEnter the caption for a shape, Caption,
theBlockCollectionfrmPeta.shpSELECTED_SHAPE.Tag.sCaptiontheBlockC ollectionfrmPeta.shpSELECTED_SHAPE.Tag.sCaption = s
theBlockCollectionfrmPeta.shpSELECTED_SHAPE.Tag.updateShapeCaptio nPos
Else MsgBox Object should be selected
End If End Sub
4. Menambah caption titiknode dengan posisi di atas:
Private Sub mnuTbhCaptionDitengah_Click If SELECTED_SHAPE -1 Then
Dim s As String s = InputBoxEnter the caption for a shape, Caption,
theBlockCollectionfrmPeta.shpSELECTED_SHAPE.Tag.sCaptionUpper theBlockCollectionfrmPeta.shpSELECTED_SHAPE.Tag.sCaptionUpper = s
theBlockCollectionfrmPeta.shpSELECTED_SHAPE.Tag.bSetUpperCaptionD own = False
theBlockCollectionfrmPeta.shpSELECTED_SHAPE.Tag.updateShapeCaptio nPos
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
Else MsgBox Object should be selected
End If End Sub
5. Menambah caption titiknode dengan posisi di bawah:
Private Sub mnuAddCaptionLowerToBlock_Click mnuAddCaptionUpperToBlock_Click
theBlockCollectionfrmPeta.shpSELECTED_SHAPE.Tag.bSetUpperCaptionD own = True
theBlockCollectionfrmPeta.shpSELECTED_SHAPE.Tag.updateShapeCaptio nPos
End Sub
6. Menambah caption jalan dengan posisi di tengah:
Private Sub mnuTbhCaptionJalan_Click If PREV_SELECTED_SHAPE -1 And SELECTED_SHAPE -1 Then
Dim s As String s = InputBoxEnter the caption
theLineCollection.AddCaptionToLine frmPeta.shpPREV_SELECTED_SHAPE.Tag,
frmPeta.shpSELECTED_SHAPE.Tag, s Else
MsgBox Two objects should be selected End If
End Sub
3.4.2 Proses Graph
Data graph yang telah diinput pada form graph selanjutnya diproses untuk mendapatkan matriks jarak dari graph tersebut. Berikut Prosedure pada proses graph:
Private Sub cmdCalcData_Click Dim i As Integer
Dim j As Integer
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
Dim toIndex As Integer flxMap.Rows = frmPeta.theBlockCollection.Count + 1
flxMap.Cols = frmPeta.theBlockCollection.Count + 1 If frmPeta.theBlockCollection.Count 0 Then
flxMap.FixedRows = 1 flxMap.FixedCols = 1
End If For i = 0 To flxMap.Cols - 1
flxMap.ColWidthi = 530 Next i
For i = 1 To frmPeta.theBlockCollection.Count flxMap.row = i
flxMap.col = 0 flxMap.Text = frmPeta.theBlockCollectioni.sCaption
flxMap.row = 0 flxMap.col = i
flxMap.Text = frmPeta.theBlockCollectioni.sCaption flxMap.row = i
For j = 1 To flxMap.Cols - 1 flxMap.TextMatrixi, j = 0
flxMap.col = j flxMap.CellForeColor = vbBlack
flxMap.CellFontBold = False Next j
For j = 1 To frmPeta.theLineCollection.Count If frmPeta.theLineCollectionj.sFrom =
frmPeta.theBlockCollectioni.TagID Then toIndex =
frmPeta.theBlockCollection.getIndexFromTagfrmPeta.theLineCollection j.sTo
flxMap.col = toIndex flxMap.Text = frmPeta.theLineCollectionj.sCaption
If flxMap.Text = Then flxMap.Text = 1 flxMap.CellForeColor = vbRed
flxMap.CellFontBold = True End If
Next j Next i
ReDim jarakMe.flxMap.Rows - 1, Me.flxMap.Rows - 1 ReDim visibMe.flxMap.Rows - 1, Me.flxMap.Rows - 1
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
For i = 1 To Me.flxMap.Rows - 1 For j = 1 To Me.flxMap.Cols - 1
jaraki, j = flxMap.TextMatrixi, j If jaraki, j = 0 Then
visibi, j = 0 Else
visibi, j = Round1 jaraki, j, 2 End If
Next Next
End Sub
3.5 Prosedure Algoritma Dijkstra
Berikut prosedure yang digunakan pada algoritma Dijkstra:
Dim src As Integer Dim dest As Integer
src = getIndexOfTabNamesFrom dest = getIndexOfTabNamesTo
If src = -1 Or dest = -1 Then MsgBox something wrong
Exit Sub End If
Dim MAX As Integer MAX = flxMap.Cols
Dim current As Integer Dim dist_fc As Integer
Dim i As Integer Dim min As Integer
Dim do_search As Boolean
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
do_search = True current = src
dist_fc = 0 flxS.TextMatrix1, current = True
flxS.row = 1 flxS.col = current
flxS.CellForeColor = vbRed flxS.CellFontBold = True
flxDist.TextMatrix1, current = 0 Do While do_search
For i = 1 To MAX - 1 If myVlflxMap.TextMatrixcurrent, i 0 And _
myVlflxDist.TextMatrix1, i myVlflxMap.TextMatrixcurrent, i + dist_fc Then
flxDist.TextMatrix1, i = myVlflxMap.TextMatrixcurrent, i + dist_fc
flxPath.TextMatrix1, i = current End If
Next i min = INF
For i = 1 To MAX - 1 If myVlflxDist.TextMatrix1, i min And flxS.TextMatrix1, i
= False Then min = myVlflxDist.TextMatrix1, i
current = i dist_fc = myVlflxDist.TextMatrix1, i
End If Next i
flxS.TextMatrix1, current = True If min = INF Then
do_search = False End If
Loop
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009. USU Repository © 2009
3.6 Flowchart Algoritma Dijkstra