Yellow Ladybug

Senin, 10 Juni 2019

Graf dan Pohon || Algoritma Pemograman 2 C++


 DJIKSTRA dan KKURSKAL



Oleh:
RABIATUL MARDIYAH 1801301057
CAHYO DWI SAPUTRA 1801301009
NANDA SETIA WATI 1801301048
AHMAD TRIADMOJO 1801301010

Dosen Pengampu:
Winda Aprianti, M.Si





                                                                DAFTAR ISI






                                                                                     

BAB I
DJIKSTRA


1.1  Pengertian Djikstra

Algoritme Dijkstra adalah sebuah algoritma yang dipakai dalam memecahkan permasalahan jarak terpendek (shortest path problem) untuk sebuah graf berarah (directed graph).
Algoritma ini dioublikasikan pada tahun 1959  jurnal Numerische Mathematik yang berjudul “A Note on Two Problems in Connexion with Graphs” dan dianggap sebagai algoritma greedy.
Permasalahan rute terpendek dari sebuah titik ke akhir titik lain adalah sebuah masalah klasik optimasi yang banyak digunakan untuk menguji sebuah algoritma yang diusulkan. Permasalahan rute terpendek dianggap cukup baik untuk mewakili masalah optimisasi, karena permasalahannya mudah dimengerti (hanya menjumlahkan seluruh edge yang dilalui) namun memiliki banyak pilihan solusi.
Menurut Andrew Goldberg peneliti Microsoft Research Silicon Valley, mengatakan ada banyak alasan mengapa peneliti terus mempelajari masalah pencarian jalan terpendek. “Jalan terpendek adalah masalah optimasi yang relevan untuk berbagai macam aplikasi, seperti jaringan routing, game, desain sirkuit, dan pemetaan”.
Diskripsi matematis untuk grafik dapat diwakili G = {V. E}, yang berarti sebuah grafik (G) didefenisikan oleh satu set simpul (Vertex = V) dan koleksi Edge (E). Algoritma Dijkstra bekerja dengan membuat jalur ke satu simpul optimal pada setiap langkah. Jadi pada langkah ke n, setidaknya ada n node yang sudah kita tahu jalur terpendek.
Langkah-langkah algoritma Dijkstra dapat dilakukan dengan  langkah-langkah berikut:
1.        Tentukan titik mana yang akan menjadi node awal, lalu beri bobot jarak pada node pertama ke node terdekat satu per satu, Dijkstra akan melakukan pengembangan pencarian dari satu titik ke titik lain dan ke titik selanjutnya tahap demi tahap.
2.        Beri nilai bobot (jarak) untuk setiap titik ke titik lainnya. Set semua node yang belum dilalui  dan set node awal sebagai “Node keberangkatan”
3.        Dari node keberangkatan, pertimbangkan node tetangga yang belum dilalui dan hitung jaraknya dari titik keberangkatan. Jika jarak ini lebih kecil dari jarak sebelumnya (yang telah terekam sebelumnya) hapus data lama, simpan ulang data jarak dengan jarak yang baru
4.        Saat kita selesai mempertimbangkan setiap jarak terhadap node tetangga, tandai node yang telah dilalui sebagai “Node dilewati”. Node yang dilewati tidak akan pernah di cek kembali, jarak yang disimpan adalah jarak terakhir dan yang paling minimal bobotnya.
5.        Set “Node belum dilewati” dengan jarak terkecil (dari node keberangkatan) sebagai “Node Keberangkatan” selanjutnya dan ulangi langkah e.

Gambar 1.1 Contoh Hasil Membuat Djikstra

1.2  Penjelasan Program

 

A. Coding Djikstra




B. Hasil Running Program



BAB II
KRUSKAL


2.1 Pengertian Kruskal

     Algoritma kruskal adalah sebuah algoritma dalam teori graf yang mencari sebuah minimum spanning tree untuk sebuah graf berbobot yang terhubung. Ini berarti menemukan subset dari tepi yang membentuk sebuah pohon yang mencakup setiap titik , di mana berat total dari semua tepi di atas pohon diminimalkan.. Jika grafik tidak terhubung, maka menemukan hutan rentang minimum (pohon rentang minimum untuk setiap komponen terhubung ) . Algoritma Kruskal juga tergolong algoritma Greedy dalam teori graf yang digunakan untuk mencari minimum spanning tree. Algoritma ini pertama kali muncul pada tahun 1956 dalam sebuah tulisan yang ditulis oleh Joseph Kruskal. Algoritma Kruskal adalah contoh dari algoritma rakus . Algoritma ini pertama kali muncul dalam Prosiding American Mathematical Society , hal 1956.
Dasar pembentukan algoritma Kruskal berasal dari analogi growing forest. Growing forest maksudnya adalah untuk membentuk pohon merentang minimum T dari graf G adalah dengan cara mengambil satu per satu sisi dari graf G dan memasukkannya ke dalam pohon yang telah terbentuk sebelumnya. Seiring dengan berjalannya iterasi untuk setiap sisi, maka forest akan memiliki pohon yang semakin sedikit. Oleh sebab itu, maka analogi ini disebut dengan growing forest. Algoritma Kruskal akan terus menambahkan sisi – sisi ke dalam hutan yang sesuai hingga akhirnya tidak akan ada lagi forest dengan, melainkan hanyalah sebuah pohon yang merentang minimum.
Graph : kumpulan dua himpunan yaitu himpunan titik ( vertex / simpul / node ) dan kumpulan dari garis ( edge ).
Tree : graph tak berarah yang terhubung dan tidak mengandung sirkuit. Sirkuit : simpul awal = simpul akhir.1
Secara Umum  Algoritma Kruskal ditulis :
1.      T masih kosong .
2.      pilih sisi (i,j) dengan bobot minimum.
3.      pilih sisi (i,j) dengan bobot minimum berikutnya yang tidak membentuk cycle di T, tambahkan (i,j) ke T.
4.      Ulangi langkah 3 sebanyak (n-2) kali.
5.      Total langkah (n-1) kali.

2.1.1 Karakteristik Algoritma Kruskal

Sifat Algoritma Kruskal ini:
1.  Ia bekerja tidak hanya dengan grafik diarahkan.
2.  Ia bekerja dengan bobot dan tidak grafik tertimbang. Tapi, yang lebih menarik, apabila tepi yang berbobot.
3.  Kruskal adalah jenis algoritma serakah yang menghasilkan solusi optimal MST.

2.1.2 Kelebihan dan Kekurangan Algoritma Kruskal

Terdapat dua macam algoritma tipe greedy yang dapat memenuhi pemecahan masalah pohon merentang ini. Yaitu algoritma Prim dan algoritma kruskal, berikut adalah kelebihan dan kekurangan algoritma Kruskal dibanding algoritma prim.
a)      Kelebihan Algoritma Kruskal
Kelebihan algoritma Kruskal dibanding algoritma prim adalah sebagai berikut:
Sangat cocok diterapkan saat graf memiliki sisi berjumlah sedikit namun memiliki sangat banyak simpul, karena orientasi kerja algoritma ini adalah berdasarkan pada urutan bobot sisi, tidak berdasarkan simpul.
b) Kekurangan Algoritma Kruskal
Beberapa hal yang menjadi kekurangan algoritma kruskal dibanding algoritma prim :
Kurang cocok digunakan saat graf lengkap atau yang mendekati lengkap, dimana setiap simpul terhubungkan dengan semua simpul yang lain. Karena algoritma Kruskal menitik beratkan pada pencarian sisi, dimana sisi-sisi tersebut harus diurutkan dan ini memakan waktu yang tidak sedikit
Contoh Penyelesaian dengan Algoritma Kruskal
Contoh penyelesaian kasus minimun spanning tree dengan algoritma kruskal, diketahui sebuah graf berbobot seperti gambar 2.10 dibawah ini
                        
                                    
Tabel 2. 1 Daftar urut nilai Graf dari sisi terbesar sampai terkecil
Bobot
Ruas


15
D,E


9
B,D
E,F

8
B,C
B,E
F,G
7
A,D
C,E

6
A,B
E,G

5
D,F


Penyelesaian :
  1. Mula-mula kita buat sekumpulan titik G hanya terdiri dari simpulsimpul saja.
                    
  2. Urutkan Ruas dari bobot kecil ke besar (DF, AB, EG, AD, CE, BC, BE, FG, BD, EF, DE), kemudian berdasarkan urutan tersebut, kita menambahkan ruas dengan mencegah terbentuknya sirkuit.
                      
                          
                          
                            
                            
                       
Spanning Tree adalah sebagai berikut :
  • Pilih ruas terkecil dari keseluruhan graf secara acak. Ruas DF adalah ruas terkecil dengan bobot 5 (gambar 2.11 (a))
  • Setelah ruas 1 didapatkan, ulangi lagi pemilihan ruas terkecil secara acak dari keseluruhan graf. Ruas AB dan ruas EG adalah ruas terkecil dengan bobot 6. Pilih acak ruas AB (Gambar 2.11(b))
  • Lanjutkan untuk ruas yang selanjutnya, Ruas EG adalah ruas terkecil dengan bobot 6 dan tidak membentuk sirkuit jika dihubungkan. Maka pilih ruas EG (Gambar 2.11(c))
  • Pilih ruas selanjutnya dengan bobot yg terkecil saat ini, yaitu ruas AD dan ruas CE dengan bobot 7. Pilih acak ruas AD (Gambar 2.11(d))
  • Lanjutkan untuk ruas CE adalah ruas terkecil dengan 7 dan tidak membentuk sirkuit jika dihubungkan. Maka pilih ruas CE (Gambar 2.11(e))
  • Ruas selanjutnya dengan bobot yg terkecil saat ini yaitu ruas BC, BE dan FG dengan bobot 8. Pilih acak ruas BC dan hapus ruas BE (Gambar 2.11(f)) dan ruas FG karena akan membentuk sirkuit jika dihubungkan (Gambar 2.11(g))
  • Untuk ruas-ruas selanjutnya, BD, EF,dan DE dihapus karena akan membentuk sirkut jika dihubungkan (Gambar 2.11(h), Gambar 2.11(i), Gambar 2.11(j))
  • Gambar 2.11(k) adalah Minimum Spanning Tree yang dihasilkan.



2.3 Penjelasan Program

      A.  Algoritma Kruskal















































































           B. Hasil Running Program

















BAB III
KASUS ALGORITMA KRUSKAL DAN DJIKSTRA


3.1 Map



















3.2 Graf Kruskal



















3.3 Graf Djikstra





















3.4 Matriks Kruskal



1
2
3
4

5
6
7
8
9
10
11
12
13
1
0
2100
0



0
0
0
0
0
0
0
0
3200




0

























2
2100
0
2000



0
0
0
0
0
0
0
0
0




0

























3
0
2000
0



0
0
0
0
0
0
0
0
0




1500

























4
0
0
1500



400
0
0
0
0
0
0
0
0



0
























5
0
0
0



0
3500
0
0
0
0
0
700
0



400
























6
0
0
0



3500
0
400
0
0
0
0
0
0



0
























7
0
0
0



0
400
0
200
0
0
0
0
0



0
























8
0
0
0



0
0
200
0
2300
0
0
0
0



0
























9
0
0
0



0
0
2300
0
0
4000
0
0
0



0
























10
0
0
0



0
0
0
0
4000
0
1700
0
0



0
























11
0
0
0



0
0
0
0
0
1700
0
1600
0



0
























12
0
0
0



0
0
0
0
0
0
1600
0
300



0
























13
3200
0
0
0

0
0
0
0
0
0
0
300
0
















3.5 Matriks Djikstra



0

1

2

3

4

5

6

7

8

9

10

11

12

0

0


2100


0


0


0


0


0


0


0


0


0


0


3200









































1

2100


0


2000


0


0


0


0


0


0


0


0


0


0









































2

2000


0


0


1500


0


0


0


0


0


0


0


0


0









































3

0


0


1500


0


400


0


0


0


0


0


0


0


0









































4

0


0


0


400


0


3500


0


0


0


0


0


700


0









































5

0


0


0


0


3500


0


400


0


0


0


0


0


0



































































6

0


0


0


0


0


400


0


200


0


0


0


0


0

7

0


0


0


0


0


0


200


0


2300


0


0


0


0









































8

0


0


0


0


0


0


0


2300


0


4000


0


0


0









































9

0


0


0


0


0


0


0


0


4000


0


1700


0


0









































10

0


0


0


0


0


0


0


0


0


1700


0


1600


0









































11

0


0


0


0


700


0


0


0


0


0


1600


0


300









































12

3200


0


0


0


0


0


0


0


0


0


0


300


0











































3.6 Hasil Running Kruskal





































3.7 Hasil Running Djikstra












































































BAB IV
PENUTUP


3.1 Kesimpulan


Algoritma Dijkstra merupakan sebuah algoritma yang dipakai dalam memecahkan permasalahan jarak terpendek untuk sebuah graph berarah dengan bobot-bobot sisi yang bernilai positif. Sedangkan Algoritma kruskal adalah sebuah algoritma dalam teori graf yang mencari sebuah minimum spanning tree untuk sebuah graf berbobot yang terhubung. Ini berarti menemukan subset dari tepi yang membentuk sebuah pohon yang mencakup setiap titik , di mana berat total dari semua tepi di atas pohon diminimalkan. Jadi algoritma djikstra merupakan pencarian nilai pendek dengan meggunakan bobot sisi yang bernilai positif sedangkan algoritma Kruskal dia mencari nilai minimum dengan menemukan subset dari sebuah pohon yang mencakup setiap titik.




DAFTAR PUSTAKA



Tidak ada komentar:

Remastering Llinux Ubuntu 14.04

Pengertian Remastering Remastering (istilah diambil dari proses produksi audio) merupakan suatu proses mengubah perangkat lunak untuk ...