Prosedure Algoritma Greedy Flowchart Algoritma Greedy Prosedure Algoritma Dijkstra

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 ABEJI. 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 ABEHI. 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 AG : A – B – G : 6 AH : A – B – E – H : 11 AI : A – B – E – H – I : 15 AJ : 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