Analisis dan Perbandingan Algoritma L-Queue dan Algoritma Floyd Dalam Penentuan Lintasan Terpendek Pada Graph

18

BAB 2

LANDASAN TEORI

2.1.

Pengertian Algoritma

Algoritma adalah urutan atau deskripsi langkah- langkah penyelesaian masalah
yang tersusun secara logis, ditulis dengan notasi yang mudah dimengerti
sedemikian sehingga langkah- langkah tersebut dapat dilaksanakan oleh pemroses
dan merubah masukan masukan menjadi keluaran (Thomas, 2009).
Algoritma adalah ilmu yang mempelajari cara penyelesaian suatu masalah
berdasarkan urutan langkah-langkah terbatas yang disusun secara sistematis dan
menggunakan bahasa yang logis dengan tujuan tertentu (Barakbah, dkk, 2013).

2.1.1. Syarat Algoritma
Menurut (Knuth, 1997) algoritma harus memenuhi persyaratan :
1. Finiteness : Algoritma harus berakhir (terminate) setelah melakukan

sejumlah langkah proses.
2. Definiteness : Tidak menimbulkan makna ganda (ambgious).
3. Input : Setiap algoritma memerlukan data sebagai masukan untuk diolah.
4. Output : Setiap algoritma memberikan satu atau beberapa hasil keluaran.
5. Effectiveness : langkah-langkah algoritma dikerjakan dalam waktu yang
wajar
2.2. Shortest Path
Masalah jalan terpendek adalah salah satu masalah yang paling mendasar dalam
kombinasi optimasi. Bahkan dalam rangka memecahkan masalah yang paling
kombinatorial, baik perhitungan jalur terpendek disebut untuk, atau konsep yang
dibuat menggunakan yang pertama kali dikembangkan dalam kerangka jalur
terpendek. Selain itu meningkatnya peran model jaringan skala besar, seperti yang
dikembangkan dalam analisis transportasi dan perencanaan telah meningkatkan

Universitas Sumatera Utara

19

kebutuhan untuk efisien algoritma jalur terpendek dikelompokkan berdasarkan
jenis pola dan metode pencocokan string yang digunakan (Giorgio, 1998).


2.3. Teori Dasar Graph
Teori graph adalah cabang kajian yang mempelajari sifat-sifat graph. Secara
informal, suatu graph adalah himpunan benda-benda yang disebut simpul
(vertex atau node) yang terhubung oleh sisi (edge) atau busur (arc) (Diestel,
2006).
Graph dapat dikelompokkan menjadi beberapa jenis bergantung pada sudut
pandang pengelompokkan-nya.

Pengelompokkan

graph

dapat

dipandang

berdasarkan ada tidak nya sisi ganda atau sisi kalang, berdasarkan jumlah simpul
atau berdasarkan orientasi arah pada sisi (Munir, 2007).
Berdasarkan ada atau tidaknya gelang atau busur ganda pada suatu graph

maka secara umum graph dapat dikelompokkan menjadi dua jenis:
1. Graph sederhana (simple graph) yaitu graph yang tidak mengandung
gelang maupun sisi-ganda. Pada graph sederhana, sisi adalah pasangan
tak-terurut (unordered pairs). Jadi menuliskan sisi (u, v) sama saja dengan
(v, u). Kita dapat juga mendefinisikan graph sederhana G = (V, E) terdiri
dari himpunan tidak kosong simpul-simpul dan E adalah himpunan
pasangan tak-terurut yang berbeda disebut sisi (Munir, 2007).
2. Graph tak-sederhana (unsimple graph) yaitu graph yang mengandung sisi
ganda atau gelang dinamakan graph tak-sederhana (unsimple graph). Ada
dua macam graph tak-sederhana, yaitu graph ganda dan graph semu.
Sisi pada graph dapat mempunyai orientasi arah. Menurut orientasi arah
pada sisinya, graph dibagi menjadi dua jenis, yaitu:
1. Graph tidak berarah (undirected graph) adalah graph yang sisinya
tidak mempunyai orientasi arah, pada graph ini, urutan pasangan
simpul yang dihubungkan oleh sisi tidak diperhatikan. Sebagai
contoh graph tidak berarah dapat dilihat pada gambar2.1 (Munir,
2007).

Universitas Sumatera Utara


20

Gambar 2.1 Graph Tidak berarah

2. Graph berarah (directed graph) adalah graph yang setiap sisinya
diberikan orientasi arah, graph berarah sering dipakai untuk
menggambarkan aliran proses, peta lintas suatu kota, dan
sebagainya (Munir, 2007). Sebagai contoh graph berarah dapat
dilihat pada gambar 2.2

Gambar 2.2 Graph Berarah

2.4. Algoritma L-Queue
Antrian (queue) merupakan pilihan yang sangat bijak ketika kita menerapkan
SPT, biasanya disebut Algoritma L-queue, merupakan implementasi yang efisien
dalam metode lintasan terpendek yang banyak diketahui dimana ditujukan kepada
Bellman- Ford-Moore (Giorgio,1998)
Queue beroperasi dengan cara First In First Out (FIFO) elemen pertama
masuk merupakan elemen yang pertama keluar yaitu, grafik yang tingkat demi
tingkat dieksplorasi.. Untuk penyisipan (insert) hanya dapat dilakukan pada satu

sisi yaitu sisi belakang (rear), sedangkan untuk penghapusan (remove) pada sisi
depan (front) dari list (Francois,1991).

Universitas Sumatera Utara

21

Operasi dasar pada queue :
1. create
Adalah suatu operator untuk membentuk dan menunjukkan suatu antrian
hampa Q.
Noel ( Create(Q)) = 0
Front (Create(Q)) = tidak terdefinisi
Rear (Create(Q))

= tidak terdefinisi

2. isEmpty
Adalah operator yang menentukan apakah antrean Q hampa atau tidak. Hasil
dari operator ini merupakan tipe data berjenis Boolean.

isEmpty (Q)

= True , jika Q hampa
= False , jika Q tidak hampa.

3. insert
Suatu operator yang menyisipkan elemen ke dalam queue pada bagian
belakang (rear)
-

rear (insert(A,Q)) = A

-

isEmpty (insert(A,Q)) = false

Algoritma Qinsert
1. if front = 1 and rear = N , or If front = rear + 1,
then
overflow,


Return

2. if front := null, then
set front := 1 and rear := 1
else if rear = N , then
set rear := 1
else
set rear := rear + 1
3. set queue [rear] := item
4. Return

4.

remove
Operator yang menghapus elemen bagian depan (front) dari queue

Universitas Sumatera Utara

22


Algoritma Qdelete
1. if front := null , then underflow , Return
2. set item := queue[front]
3. [find new value of front]
if front = rear , then
set front := null and rear := null
else if front = N, then
set front := 1
else
set front := front + 1
4. Return

2.5. Algoritma Floyd
Teknik untuk menghitung panjang jalan terpendek antara semua pasangan node
dalam jaringan n-node yang tidak mengandung sirkuit panjang negatif merupakan
teknik dari algoritma Floyd (Douglas, 1981).
Algoritma floyd adalah salah satu varian dari pemrograman dinamis, yaitu
suatu metode yang melakukan pemecahan masalah dengan memandang solusi
yang akan diperoleh sebagai suatu keputusan yang saling terkait. Artinya solusisolusi tersebut dibentuk dari solusi yang berasal dari tahap sebelumnya dan ada

kemungkinan solusi lebih dari satu (Khan, 2014).
Algoritma floyd juga dikenal sebagai metode penempatan vertex yang juga
merupakan jenis pemrograman dinamis dan digunakan untuk menemukan jalur
terpendek antara simpul dari graph berbobot (Wei, 2010).
Algoritma Floyd sangat efisien dari sudut pandang penyimpanan data
karena dapat diimplementasikan dengan hanya pengubahan sebuah matriks jarak
(Rudi, 2014).
Algoritma ini dapat digunakan untuk mencari jarak terpendek antara
semua titik dalam graph. Bentuk algoritma untuk mencari R+ adalah sebagai
berikut (Aini, 2012).
Step 1

:

Jika

antara

i-j


merupakan

jalan

(edge),

T[i,j]

berisi panjang jalan. Jika tidak, T[i,j]= ∞.
Step 2

: For k=1 to n do
For i=1 to n do
For j=1 to n do

Universitas Sumatera Utara

23

T[i,j]= min{ T[i,j] , T[i,j] · T[k,j]

}
Step 3

: R+=T.

Gambar 2.3. Graph Berbobot untuk Algoritma Floyd
Graph berbotot diatas dapat dijadikan sebagai matriks inisialiasi seperti
pada Tabel 2.1.

A

B

C

D

A

0

3





B



0

4

1

C

2



0



D





1

0

DARI/KE

Tabel 2.1. Inisialisasi Matriks

Dari matriks inisialisasi dapat dicari R0, R1, R2, R3 dan R4. Kotak abjad
berwarna hijau disamping kiri adalah titik awal dan kotak abjad berwarna
merah yang ada di atas adalah titik tujuan-nya. Sedangkan kotak angka
hijau dan merah berfungsi untuk menentukan sebuah index. Dalam
gambar graph 2.3 diatas terdapat 4 buah titik, yaitu A, B, C, D maka akan
ada 5 proses yang akan dilewati yaitu R0, R1, R2, R3, dan R4 sebagai

Universitas Sumatera Utara

24

hasil akhir, perlu diingat bahwa hasil dari sebuah proses akan digunakan
untuk proses berikutnya.
Dari proses perhitungan tersebut maka akan didapatkan hasil seperti pada
gambar 2.4 berikut,

Gambar 2.4. Matriks Hasil Proses Algoritma Floyd

Universitas Sumatera Utara

25

2.5.1. PSEUDOCODE
Pseudocode Algoritma Floyd
Function fw(int [1 .. n, 1 .. n] graph) {
// inisialisasi
Var int [1 .. n, 1 .. n] jarak := graph
Var int [1 .. n, 1 .. n] sebelum
For i from 1 to n
For j from 1 to n
If jarak[i,j] < takhingga
Sebelum[i,j] := i
// perulangan utama
For k from 1 to n
For i from 1 to n
For j from 1 to n
If jarak[i,j] > jarak [i,k] + jarak[k,j]
Jarak[i,j]=jarak[i,k] + jarak[k,j]
Sebelum[i,j] = sebelum[k,j]

Universitas Sumatera Utara