Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Algoritma dan Struktur Data

Presentasi serupa


Presentasi berjudul: "Algoritma dan Struktur Data"— Transcript presentasi:

1 Algoritma dan Struktur Data
Shortest Path Problem

2 Metode Pencarian dan Pelacakan
Ada 2 teknik dalam pencarian dan pelacakan: Pencarian Buta (Blind Search) Pencarian Melebar Pertama (Breadth First Search) Pencarian Mendalam Pertama (Depth First Search) Pencarian Terbimbing (Heuristic Search) Pendakian Bukit (Hill Climbing) Pembangkit dan Pengujian (Generate and Test) Simulated Anneling Pencarian Terbaik Pertama (Best First Search) Greedy - Dijkstra A*

3 Pencarian Buta: tidak ada informasi awal yang digunakan untuk proses pencarian.  Waktu aksesnya lama  Besarnya memori yang digunakan Pencarian Heuristic: ada informasi awal yang digunakan untuk proses pencarian. Menggunakan suatu fungsi yang menghitung biaya perkiraan (estimasi) dari suatu simpul tertentu menuju ke simpul tujuan -> disebut fungsi heuristic Aplikasi yang menggunakan fungsi heuristic : Google

4 Shortest Path Problem (SPP)
Persoalan Shortest Path Problem  bentuk umum permasalahan jalur terpendek. Contoh kasus: Penentuan rute perjanalanan bus/truk. Perencanaan investasi. Penentuan rute pesawat terbang. Jalur yang ada dapat direpresentasikan menggunakan graph.

5 Implementasi Jalur ke Graph
Karakteristik graph untuk SPP: Graph Berarah G=(V, E). V = kumpulan vertex / node  kota E = kumpulan edge  jalur / jalan Cij adalah cost atau jarak untuk edge(i,j) Source Node = 1 Destination Node = n Variabel :

6 Contoh Data

7 Formulasi Secara matematis, persoalan SPP dapat diformulasikan sbb:
Untuk mencari jalur terpendek dapat digunakan bermacam-macam algoritma SPP yang ada.

8 Jenis-jenis Algoritma SPP
Algoritma Dijkstra Algoritma Bellman-Ford Algoritma A* Algoritma Floyd-Warshall Algoritma Johnson Algoritma Genetik

9 Algoritma Dijkstra Ditemukan oleh Edger Wybe Dijkstra.
Merupakan salah satu algoritma SPP yang bekerja secara greedy. Prinsip kerja: Pada setiap langkah, ambil sisi yang berbobot minimum yang menghubungkan sebuah simpul yang sudah terpilih dengan sebuah simpul lain yang belum terpilih. Lintasan dari simpul asal ke simpul yang baru haruslah merupakan lintasan yang terpendek di antara semua lintasannya ke simpul-simpul yang belum terpilih.

10 Langkah-langkah Algoritma Dijkstra
Memilih titik awal. Menghitung jarak ke setiap node tetangga. Memilih jarak terdekat dari setiap node tetangga. Ulangi langkah 2 jika belum tiba di node tujuan. Memberi nilai pada setiap node, nilai 0 untuk node awal dan ‘~’ untuk node lain. Menandai setiap node belum dikunjungi. Untuk node sekarang, hitung jarak pada tiap node tetangga dengan menjumlahkan jarak node sekarang + jarak menuju node tetangga. Jika jarak < jarak tercatat pada node tersebut maka nilai jarak pada node tersebut diganti.

11 Menandakan node sekarang sebagai node yang telah dikunjungi. Node ini tidak akan dikunjungi lagi. Menandai node tetangga dengan jarak terdekat sebagai node selanjutnya kemudian langkah ke-3 dilakukan untuk node tersebut

12 Contoh Contoh Penyelesaian SPP dengan Dijkstra

13 Contoh 2 (node 1 ke node 7)

14 Implementasi Graph Ke Program
Graph dalam Java: Dengan Java, Graf dapat dibuat menjadi sebuah bentuk obyek. Objek yang dapat kita bentuk adalah vertexnya. Lalu atribut-atribut yang dapat dimasukan ke dalam objek tersebut antara lain label, node-node yang berhubungan dengan vertex tersebut, dan jaraknya. Karena setiap vertex dapat terhubung dengan banyak vertex, maka digunakan kelas Vector (bawaan java).

15 Langkah-langkah Buat sebuah projek java application dengan nama GrafSederhana. Kelas-kelas yang harus dibuat: Main (Utama) Vertex XNode

16 Kelas Main Dibuat langsung saat generate projek

17 Kelas XNode Tambahkan atribut: private Vertex vertex;
private int panjang; Buat konstruktor XNode(Vertex vertex, int panjang) Di dalam konstruktor beri perintah untuk inisialisasi atribut vertex dan panjang. Tambahkan fungsi getVertex() dan getPanjang().

18 Kelas Vertex Tambahkan atribut: private String label.
private Vector<XNode> xnodes. Buat konstruktor Vertex(String label) Di dalam konstruktor beri perintah untuk inisialisasi atribut label dan xnodes. Tambahkan fungsi getLabel() dan getXNode().

19 Coba Projek Di kelas main, buat sebuah objek vector dengan nama listV.
Setelah itu, tambahkan beberapa objek vertex ke dalamnya. Kemudian buat perulangan untuk mencetak label dari vertex-vertex yang sudah dimasukkan ke dalam listV.

20 Implementasi Dijkstra
Node Buat kelas dengan nama Node (kelas turunan dari kelas Vertex). Tambahkan atribut: private int nilai private boolean kunjung private int tipeNod Buat getter dan setter untuk semua atribut tersebut. Buat konstruktor untuk ketiga atribut ditambah kontruktor kelas parent.

21 … Node Override fungsi addXNode lalu isi fungsi dengan koding berikut:
for (XNode xNode : super.getXNodes()) if(xNode.getNode().getLabel().equals(xnode.getNode().getLabel())) return; //proteksi apakah relasi baru dibuat atau bukan. if(baru) xnode.getNode().addXNode(new XNode(this, xnode.getPanjang()), false); super.getXNodes().add(xnode);

22 .. XNode Tambahkan atribut:
private Node nod Buat setter dan getter untuk atribut tersebut. Buat konstruktor untuk atribut node dan panjang.

23 Main Buat vector dengan nama listNode yang hanya dapat menyimpan objek dari Node. Masukkan 6 objek Node ke dalam vector Vector<Node> listNode = new Vector<Node>(); listNode.add(new Node("1", -1, false,0)); listNode.add(new Node("2", -1, false,1)); listNode.add(new Node("3", -1, false,1)); listNode.add(new Node("4", -1, false,1)); listNode.add(new Node("5", -1, false,2)); listNode.add(new Node("6", -1, false,1));

24 Main Buat relasi antar node berdasarkan koding berikut:
Main Buat relasi antar node berdasarkan koding berikut: listNode.get(0).addXNode(new XNode(listNode.get(1), 7), true); listNode.get(0).addXNode(new XNode(listNode.get(2), 9), true); listNode.get(0).addXNode(new XNode(listNode.get(5), 14), true); listNode.get(1).addXNode(new XNode(listNode.get(2), 10), true); listNode.get(1).addXNode(new XNode(listNode.get(3), 15), true); listNode.get(2).addXNode(new XNode(listNode.get(3), 11), true); listNode.get(2).addXNode(new XNode(listNode.get(5), 2), true); listNode.get(3).addXNode(new XNode(listNode.get(4), 6), true); listNode.get(4).addXNode(new XNode(listNode.get(5), 9), true);

25 Main Tambahkan koding berikut:
Main Tambahkan koding berikut: Node nodAwal = null,nodAkhir = null,nodSkr = null; for (Node nod : listNode) { if(nod.getTipeNod() == 0) nodAwal = nod; else if(nod.getTipeNod() == 2) nodAkhir = nod; } if(nodAwal == null) return; nodAwal.setNil(0); nodSkr = nodAwal; Vector<Node> listPath = new Vector<Node>(); listPath.add(nodSkr);

26 … Main while(nodSkr != nodAkhir){ Node nodNext = nodSkr; int inc = 0;
for (XNode xNode : nodSkr.getXNodes()) if(!xNode.getNode().isKunjung()){ if(xNode.getNode().getNil() != -1){ if((nodSkr.getNil()+xNode.getPanjang()) < xNode.getNode().getNil()) xNode.getNode().setNil(nodSkr.getNil()+xNode.getPanjang()); }else if(inc == 0){ nodNext = xNode.getNode(); inc++; if(xNode.getNode().getNil() < nodNext.getNil()) } nodSkr.setKunjung(true); nodSkr = nodNext; listPath.add(nodSkr); for(Node nod : listPath) System.out.print(nod.getLabel()+",");


Download ppt "Algoritma dan Struktur Data"

Presentasi serupa


Iklan oleh Google