IMPLEMENTASI ALGORITMA PENCARIAN
K
JALUR SEDERHANA TERPENDEK
DALAM GRAF
(Kata kunci:
Algoritma deviasi, algoritma Dijkstra, jalur sederhana, jalur terpendek)
PRESENTASI TUGAS AKHIR – KI091391
Penyusun Tugas Akhir :
Anggakara Hendra Nandana
(NRP: 5108.100.075)
Dosen Pembimbing
:
Yudhi Purwananto, S.Kom., M.Kom.
Rully Soelaiman, S.Kom., M.Kom.
ILUSTRASI PERMASALAHAN
3 10 Juli 2013 Tugas Akhir - KI091391
Problem dari situs Sphere Online Judge (SPOJ) berjudul “
Kth Shortest Path
”
DESKRIPSI SOAL SPOJ “Kth Shortest Path”
1. Seseorang bernama Isaac merasa bosan karena setiap hari melalui jalur yang sama untuk melakukan perjalanan dari rumah menuju kantor.
2. Jalur yang diambil Isaac selalu merupakan jalur terpendek, yaitu jalur dengan biaya terkecil, dan selalu merupakan jalur sederhana.
3. Biaya pada sebuah jalur merupakan total waktu yang dibutuhkan untuk melewati jalan-jalan yang menghubungkan dua buah tempat yang menyusun jalur tersebut. 4. Waktu yang dibutuhkan untuk melewati sebuah jalan bisa bernilai sama atau berbeda
dengan jalan-jalan yang lain.
5. Pada hari-hari berikutnya, Isaac ingin melewati jalur terpendek yang belum pernah dilewatinya.
BATASAN SOAL SPOJ “Kth Shortest Path”
5 10 Juli 2013 Tugas Akhir - KI091391
1. Jumlah verteks maksimum 50 buah, jumlah
edge
maksimum 2450 buah, dan banyak jalur yang dicari (k
) maksimum 200 buah.2. Jalur yang dicari harus merupakan jalur sederhana, yaitu jalur yang tidak memiliki pengulangan verteks penyusun.
FORMAT DATA MASUKAN
• Data masukan merupakan sebuah berkas teks yang hanya berisi bilangan bulat • Masing-masing bilangan bulat merepresentasikan detail graf dengan format seperti
pada Gambar 1
n m k a b
x
1
y
1
z
1
x
2
y
2
z
2
…
x
m
y
m
z
m
jumlah verteks jumlah edge jumlah jaluryang dicari verteks sumber jalur verteks tujuan jalur
FORMAT DATA MASUKAN
7 10 Juli 2013 Tugas Akhir - KI091391
n m k a b
x
1
y
1
z
1
x
2
y
2
z
2
…
x
m
y
m
z
m
verteks sumberverteks tujuan
bobotedge
• Data masukan merupakan sebuah berkas teks yang hanya berisi bilangan bulat • Masing-masing bilangan bulat merepresentasikan detail graf dengan format seperti
pada Gambar 1
CONTOH DATA MASUKAN
4 6 2 1 4
2 3 1
1 3 2
1 2 1
1 4 3
2 4 2
3 4 1
1
2
4
3
1
2
1
3
2
1
1
4
FORMAT DATA KELUARAN
9 10 Juli 2013 Tugas Akhir - KI091391
• Data keluaran merupakan sebuah berkas teks yang hanya berisi bilangan bulat.
• Masing-masing bilangan bulat merepresentasikan verteks-verteks penyusun jalur yang ditemukan
• Urutan penulisan verteks-verteks penyusun jalur dimulai dari verteks sumber hingga verteks tujuan.
• Pada tiap dua buah verteks dipisahkan sebuah tanda hubung (-).
a-v
2
-…-v
l-1
-b
CONTOH DATA KELUARAN
1-2-4
4 6 2 1 4
2 3 1
1 3 2
1 2 1
1 4 3
2 4 2
3 4 1
Data Masukan
2 3 1 2 1 3 2 1 1 410 Juli 2013 Tugas Akhir - KI091391 11
ALGORITMA NAIF (1)
2 3 1 2 1 3 2 1 1 4• Daftar kemungkinan jalur dari vertex 1 ke vertex 4: 1 : 1-2-3-4, bobot = 3
2 : 1-2-4, bobot = 3 3 : 1-3-4, bobot = 3 4 : 1-4, bobot = 3
• Pada
k
jalur terpendek pertama, masing-masing verteks dapat menjadi verteks penyusun jalur sebanyakmaksimal
k
kali.• Vertex sumber dan verteks tujuan jalur selalu muncul pada setiap
k
jalur terpendek.• Pencarian jalur dapat dilakukan dengan mencari seluruh kemungkinan jalur yang menuju verteks tujuan, hingga ditemukan jalur yang berasal dari verteks sumber
ALGORITMA NAIF (2)
2 3 1 2 1 3 2 1 1 410 Juli 2013 Tugas Akhir - KI091391 13
HASIL ALGORITMA NAIF
Kesimpulan:
Algoritma naif kurang efisien untuk menyelesaikan permasalahan pencarian
k
jalur sederhana terpendek.
LATAR BELAKANG
1. Problem berjudul “
Kth Shortest Path
” pada situs SPOJ merupakan contoh
permasalahan yang dapat ditemukan dalam kehidupan sehari-hari, sehingga
dibutuhkan sebuah algoritma untuk menyelesaikan permasalahan tersebut.
2. Algoritma naif kurang efisien dalam hal kecepatan dan memori yang
BATASAN MASALAH
15 10 Juli 2013 Tugas Akhir - KI091391
1. Pustaka yang digunakan untuk membantu pengimplementasian algoritma
merupakan C++ Standard Template Library (STL). Pustaka-pustaka tersebut
antara lain: cstdio, iostream, algorithm, cstring, vector, queue, dan ctime.
2. Kebutuhan memori hasil implementasi mengacu pada hasil keluaran dari
TUJUAN MASALAH
1. Untuk melakukan studi dan mengimplementasi algoritma pencarian
k
jalur
sederhana terpendek dalam graf yang lebih optimal dibandingkan dengan
algoritma naif dengan bantuan pustaka dari C++ Standard Template Library
.
2. Untuk menguji kebenaran hasil implementasi algoritma pencarian
k
jalur
sederhana terpendek dalam graf.
10 Juli 2013 Tugas Akhir - KI091391 17
KERANGKA PRESENTASI
Pendahuluan
Rangkaian Proses
Uji Coba
Kesimpulan
Pencarian kandidat jalur terpendek pertama
Pengambilan jalur terpendek dari himpunan kandidat
jalur X
Penghapusan subjalur dan edge-edge dari graf
Pembentukan pohon jalur terpendek Tt
Pencarian kandidat-kandidat jalur terpendek berikutnya
Pengecekan jumlah jalur dan isi himpunan kandidat
RANGKAIAN PROSES: LANGKAH 1
Pencarian kandidat jalur terpendek pertama
Pengambilan jalur terpendek dari himpunan kandidat
jalur X
Penghapusan subjalur dan edge-edge dari graf
Pembentukan pohon jalur terpendek Tt
Pencarian kandidat-kandidat jalur terpendek berikutnya
1 • Jalur terpendek pertama digunakan sebagai acuan untuk menentukan kandidat-kandidat jalur terpendek
berikutnya.
10 Juli 2013 Tugas Akhir - KI091391 19
RANGKAIAN PROSES: LANGKAH 1
Pencarian kandidat jalur terpendek pertama
Pengambilan jalur terpendek dari himpunan kandidat
jalur X
Penghapusan subjalur dan edge-edge dari graf
Pembentukan pohon jalur terpendek Tt
Pencarian kandidat-kandidat jalur terpendek berikutnya
Pengecekan jumlah jalur dan isi himpunan kandidat
jalur
1 • Jalur terpendek dari verteks 1 menuju verteks 4 pada Gambar 2 adalah jalur 1-2-3-4
• Jalur terpendek yang didapat kemudian ditambahkan ke himpunan kandidat jalur
X
ALGORITMA DEVIASI
• Jalur-jalur terpendek yang didapat dari sebuah graf dapat membentuk pohon jalur terpendek seperti pada Gambar 3
• Sebuah jalur
p
k selalu memiliki rangkaian vertex yang sama dengan jalurp
1, …,p
k-1 dari verteks sumber sampai verteks tertentu.• Verteks tersebut merupakan letak jalur
p
k menyimpang dari himpunan jalur {p
1, …,p
k-1} dan disebut verteks deviasi. Verteks deviasi pada jalurp
dinotasikan sebagaid
(p
)10 Juli 2013 Tugas Akhir - KI091391 21
RANGKAIAN PROSES: LANGKAH 2
Pencarian kandidat jalur terpendek pertama
Pengambilan jalur terpendek dari himpunan kandidat
jalur X
Penghapusan subjalur dan edge-edge dari graf
Pembentukan pohon jalur terpendek Tt
Pencarian kandidat-kandidat jalur terpendek berikutnya
Pengecekan jumlah jalur dan isi himpunan kandidat
jalur
2
• Himpunan kandidat jalur
X
berisi kandidat-kandidat jalur terpendek• Jalur yang diambil adalah jalur dengan bobot minimum dari semua anggota
X
, dan dinotasikan sebagai jalurp.
• Panjang jalur
p
dinotasikan sebagail
, dan urutan verteks penyusunnya dinotasikan sebagaiv
1,v
2, …,v
l.• Banyaknya jalur yang telah diambil dari
X
menunjukkan banyaknya jalur yang telah ditemukan
2
1
1 14
Contoh jalur terpendek dari
X
(bobot = 3)
v
1v
2v
l /v
43
v
3RANGKAIAN PROSES: LANGKAH 2
Pencarian kandidat jalur terpendek pertama
Pengambilan jalur terpendek dari himpunan kandidat
jalur X
Penghapusan subjalur dan edge-edge dari graf
Pembentukan pohon jalur terpendek Tt
Pencarian kandidat-kandidat jalur terpendek berikutnya
2
• Agar proses pemilihan jalur terpendek dapat lebih efisien, maka diperlukan struktur data yang tepat. • Pada program, implementasi himpunan kandidat jalur
menggunakan struktur data priority_queue yang
mengaplikasikan struktur heap biner.
1 1
v
1v
2v
3v
l /v
410 Juli 2013 Tugas Akhir - KI091391 23
RANGKAIAN PROSES: LANGKAH 3
Pencarian kandidat jalur terpendek pertama
Pengambilan jalur terpendek dari himpunan kandidat
jalur X
Penghapusan subjalur dan edge-edge dari graf
Pembentukan pohon jalur terpendek Tt
Pencarian kandidat-kandidat jalur terpendek berikutnya
Pengecekan jumlah jalur dan isi himpunan kandidat
jalur
3
• Bertujuan agar jalur yang sudah ditemukan tidak dapat menjadi kandidat jalur terpendek berikutnya. • Subjalur yang dihapus dimulai dari verteks sumber
hingga verteks ke-(
l
-1) pada jalurp
dan dinotasikan dengansub
p(s
,v
l -1 )• Hapus semua edge yang berasal dari verteks deviasi jalur-jalur yang ditemukan sebelum jalur
p
.RANGKAIAN PROSES: LANGKAH 4
Pencarian kandidat jalur terpendek pertama
Pengambilan jalur terpendek dari himpunan kandidat
jalur X
Penghapusan subjalur dan edge-edge dari graf
Pembentukan pohon jalur terpendek Tt
Pencarian kandidat-kandidat jalur terpendek berikutnya
4
• Pohon jalur terpendek
T
t adalah struktur pohon dari graf yang berakar pada vertekst
, yaitu verteks tujuan jalur.10 Juli 2013 Tugas Akhir - KI091391 25
RANGKAIAN PROSES: LANGKAH 4
Pencarian kandidat jalur terpendek pertama
Pengambilan jalur terpendek dari himpunan kandidat
jalur X
Penghapusan subjalur dan edge-edge dari graf
Pembentukan pohon jalur terpendek Tt
Pencarian kandidat-kandidat jalur terpendek berikutnya
Pengecekan jumlah jalur dan isi himpunan kandidat
jalur
4
• Pada proses algoritma, pohon jalur terpendek dibentuk dari graf setelah dilakukan penghapusan verteks dan edge pada graf
RANGKAIAN PROSES: LANGKAH 5
Pencarian kandidat jalur terpendek pertama
Pengambilan jalur terpendek dari himpunan kandidat
jalur X
Penghapusan subjalur dan edge-edge dari graf
Pembentukan pohon jalur terpendek Tt
Pencarian kandidat-kandidat jalur terpendek berikutnya
5
Pengembalian verteks vi ke dalam graf
Penghitungan jarak antara
vi dengan t
Penambahan kandidat jalur ke dalam X Pengembalian edge (vi, vi+1) pada graf 5.1 5.2 5.3 5.4
10 Juli 2013 Tugas Akhir - KI091391 27
RANGKAIAN PROSES: LANGKAH 5.1
Pencarian kandidat-kandidat jalur terpendek berikutnya
5
Pengembalian verteks vi ke dalam graf
Penghitungan jarak antara
vi dengan t
Penambahan kandidat jalur ke dalam X
Pengembalian edge (vi, vi+1)
pada graf 5.1
Perbaikan struktur pohon Tt
RANGKAIAN PROSES: LANGKAH 5.2
Pencarian kandidat-kandidat jalur terpendek berikutnya
5
Pengembalian verteks vi ke dalam graf
Penghitungan jarak antara
vi dengan t
Penambahan kandidat jalur ke dalam X
Pengembalian edge (vi, vi+1)
pada graf 5.2
Dilakukan penghitungan kembali jarak antara
v
i10 Juli 2013 Tugas Akhir - KI091391 29
RANGKAIAN PROSES: LANGKAH 5.3
Pencarian kandidat-kandidat jalur terpendek berikutnya
5
Pengembalian verteks vi ke dalam graf
Penghitungan jarak antara
vi dengan t
Penambahan kandidat jalur ke dalam X
Pengembalian edge (vi, vi+1)
pada graf 5.3
Perbaikan struktur pohon Tt
• Jika jalur dari verteks
v
i ke vertekst
dapatditetapkan, maka dilakukan penambahan kandidat jalur baru.
• Kandidat jalur merupakan gabungan dari
sub
p(s
,v
i) dengan jalur dariv
i menujut
pada struktur pohonT
t.
RANGKAIAN PROSES: LANGKAH 5.4
Pencarian kandidat-kandidat jalur terpendek berikutnya
5
Pengembalian verteks vi ke dalam graf
Penghitungan jarak antara
vi dengan t
10 Juli 2013 Tugas Akhir - KI091391 31
RANGKAIAN PROSES: LANGKAH 5.5
Pencarian kandidat-kandidat jalur terpendek berikutnya
5
Pengembalian verteks vi ke dalam graf
Penghitungan jarak antara
vi dengan t
Penambahan kandidat jalur ke dalam X
Pengembalian edge (vi, vi+1)
pada graf
5.5 Perbaikan struktur pohon Tt
3 1 4 2 2 1 1 2 3 4
v
i 3 1 4 2 2T
tsebelum
RANGKAIAN PROSES: LANGKAH 6
Pencarian kandidat jalur terpendek pertama
Pengambilan jalur terpendek dari himpunan kandidat
jalur X
Penghapusan subjalur dan edge-edge dari graf
Pembentukan pohon jalur terpendek Tt
Pencarian kandidat-kandidat jalur terpendek berikutnya
• Rangkaian proses algoritma berhenti jika salah satu dari dua kondisi berikut tercapai:
1. jumlah jalur yang diambil dari
X
sudah sama dengank
10 Juli 2013 Tugas Akhir - KI091391 33
KERANGKA PRESENTASI
Uji Kebenaran
Uji Kecepatan
Uji Perbandingan Algoritma
Pendahuluan
Rangkaian Proses
Uji Coba
UJI KEBENARAN
5 8 4 1 5 1 2 1 1 4 3 1 3 1 2 4 2 3 4 2 2 5 3 4 5 1 3 5 2 1-3-4-5Data Masukan Data Keluaran Program
10 Juli 2013 Tugas Akhir - KI091391 35
UJI KECEPATAN (1)
• Waktu minimal = 2,73 detik • Waktu maksimal = 2,83 detik
UJI KECEPATAN (2)
k Judul Graf Waktu (detik) 100 A 0.024 B 0.035 C 0.588 D 94.856 500 A 0.115 B 0.161 C 3.030 D 448.342 1000 A 0.227 B 0.328 C 6.165 D 888.671 5000 A 1.114 B 1.562 C 32.113 D 4486.230Judul Graf Jumlah Verteks Jumlah Edge
10 Juli 2013 Tugas Akhir - KI091391 37
UJI PERBANDINGAN ALGORITMA
k Judul Graf Algoritma TA Algoritma Naif 100 A 0.016 0.296 B 0.035 0.561 500 A 0.093 1.294 B 0.161 3.104 1000 A 0.187 2.62 B 0.328 6.24 5000 A 0.974 14.461 B 1.562 30.576
Judul Graf Jumlah Verteks Jumlah Edge
KERANGKA PRESENTASI
Kesimpulan
Pendahuluan
Rangkaian Proses
10 Juli 2013 Tugas Akhir - KI091391 39
Kesimpulan
1. Hasil implementasi algoritma pencarian jalur sederhana terpendek yang
dijelaskan pada tugas akhir ini dapat menghasilkan keluaran yang benar.
2. Kompleksitas waktu eksekusi program adalah
Ο
(
kn
(
m
+
n
log
(
n
)) pada
n
buah
edge
,
m
buah verteks, dan
k
jalur yang dicari pada graf.
Saran
KERANGKA PRESENTASI
Struktur Pohon Jalur Terpendek
Struktur Percabangan Jalur
Struktur Pohon
T
tPendahuluan
Metode
Uji Coba
10 Juli 2013 Tugas Akhir - KI091391 43
POHON JALUR TERPENDEK
Struktur Pohon Jalur Terpendek
Struktur Percabangan Jalur
Struktur Pohon
T
t Rangkaian Proses2
1
3
4
0 2 0 2 0 0 3 15
Daftar tiga jalur terpendek dari
verteks 1 ke verteks 5:
P
1: 1-2-5
P
2: 1-4-3-5
POHON JALUR TERPENDEK
Struktur Percabangan Jalur
10 Juli 2013 Tugas Akhir - KI091391 45
PERCABANGAN JALUR
Struktur Percabangan Jalur
Struktur Pohon
T
tRangkaian Proses
s
a
t
Struktur Pohon Jalur Terpendek
Jalur ke-
p
:
Kandidat jalur-jalur ke-
q
(
q
>
p
):
s
…
a
t
STRUKTUR POHON T
tStruktur Percabangan Jalur
Struktur Pohon
T
tRangkaian Proses
Struktur Pohon Jalur Terpendek
10 Juli 2013 Tugas Akhir - KI091391 47
STRUKTUR POHON T
tStruktur Percabangan Jalur
Struktur Pohon
T
tRangkaian Proses
Struktur Pohon Jalur Terpendek
2
3
4
2 0 2 05
Struktur Pohon T
tsetelah dilakukan
penghapusan edge-edge pada jalur 1-2-5
1
310 Juli 2013 Tugas Akhir - KI091391 49
10 Juli 2013 Tugas Akhir - KI091391 51