Praktikum ASDL Pertemuan III – Shortest Path.

Slides:



Advertisements
Presentasi serupa
STRUKTUR DATA (10) tree manipulation
Advertisements

Introduction to Algorithm evaluation Soal Matrikulasi Buka Buku
 public static void main(String[] args) {  int bil1=3;  do {  System.out.print(bil1+",");  bil1=bil1+4;  }  while(bil1
Double Linked List.
Dasar Pemrograman Komputer
Binary Trees adalah parent
LINKED LIST.
Universitas Muhammadiyah Malang Fakultas Teknik Jurusan Teknik Informatika Semester Genap Nur hayatin, S.ST.
LINKED LIST.
Workshop SCS: Java Game Programming
Pemrograman JAVA (TIB09)
Kondisi dan Pengulangan Sparisoma Viridi dan Suprijadi 1.
Algoritma dan Struktur Data
Pengenalan Pemrograman 1 Versi 2.0 Struktur kontrol.
Java array.
Single Linked List.
Struktur Data & Algoritma Suryana Setiawan, Ruli Manurung & Ade Azurat (acknowledgments: Denny) ‏ 1 Fasilkom UI SUR – HMM – AAFasilkom UI - IKI20100/ IKI80110P.
Modul 1- Review Java.
Implementasi Binary Tree
Queue.
Workshop Project 2 Game PacMan & Algoritma AI yang Digunakan Musuhnya
PEMROGRAMAN BERORIENTASI OBJEK
Nandang Hermanto PK2 Pertemuan 3. Perulangan Pernyataan while Pernyataan do..while Pernyataan for.
Pertemuan 8 Pemrograman Berbasis Obyek Oleh Tita Karlita
Pengenalan Pemrograman 1 Versi 2.0 Struktur kontrol.
Algoritma dan Struktur Data
KELAS INNER, KELAS ABSTRACT, DAN INTERFACE
METHOD Object Oriented Programming with JAVA 2011/2012.
OBJECT ORIENTED PROGRAMMING YANES HARDIANTO SUI Politeknik Manufaktur Astra 2011.
SELECTION STATEMEN KENDALI / PERCABANGAN
Struktur Data List Linear : Linked List (Double Linkedlist)
Linear Data Structures (Queue)
Binary Search Tree 2007/2008 – Ganjil – Minggu 9.
SLL.
Struktur Kontrol Pemilihan
Tenia Wahyuningrum, S.Kom. MT
Struktur Data List Linear : Linked List (Single Linkedlist)
Public class RelasiDemo { public static void main(String[] args) { //beberapa nilai int i = 37; int j = 42; int k = 42; System.out.println("Nilai variabel...");
Pemrograman Berorientasi Obyek Lanjut (IT251)
STRUKTUR DATA tree manipulation
BINARY TREE Universitas Ahmad Dahlan
1 Pertemuan Tree Matakuliah: T0026/Struktur Data Tahun: 2005 Versi: 1/1.
Perancangan dan pemrograman web Pertemuan 19
Struktur kontrol.
OPERATOR LOGIKA.
PERNYATAAN PERULANGAN
03 Elemen Dasar Bahasa Java
Try, Catch, Finally Throws
Binary Search Tree. Sebuah node di Binary Search Tree memiliki path yang unik dari root menurut aturan ordering – Sebuah Node, mempunyai subtree kiri.
Stack (Tumpukan) Pertemuan 4 Season 1
8. Singly Linear Linked List
Floyd-Warshall algorithm
Stack Stack atau tumpukan adalah suatu stuktur data yang penting dalam pemrograman Bersifat LIFO (Last In First Out) Benda yang terakhir masuk ke dalam.
Pemrograman Berorientasi Object
Algoritma dan Struktur Data Lanjut
Pertemuan 5 Tipe Data, Operator, Tata Bahasa
Pertemuan II : pengenalan graf
Identifier, Keyword, dan Tipe data
Introduction using 03b to Algorithm C / C++ teknik dasar Algoritma.
Tipe Data, Variabel, dan Operator
Algoritma dan Struktur Data Lanjut
As’ad Djamalilleil Elemen Dasar Java As’ad Djamalilleil
Tipe Data, Variabel, dan Operator
STRUKTUR DATA Struktur Data Graf.
ALGORITMA GRAF.
ROUTING PROTOCOL.
Algoritma dan Struktur Data Lanjut
Algoritma dan Struktur Data
Algoritma dan Struktur Data
Tipe Data, Variabel, dan Operator
Transcript presentasi:

Praktikum ASDL Pertemuan III – Shortest Path

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

Algoritma Dijkstra 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. 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.

Algoritma Bellman-Ford Tiap node menghitung jarak menuju setiap node tetangga lainnya dan meyimpan dalam tabel. Mengirimkan tabel tersebut pada masin- masing node tetangga. Saat sebuah node menerima tabel data, dihitung jarak terdekat dari node tersebut menuju ke node lainnya dan memperbaharui tabel.

Algoritma A* g(x) = jarak terpendek dari node awal ke node berikut h(x) = perkiraan jarak menuju node tujuan f(x) = g(x) + h(x) Makin kecil f(x) untuk suatu node, semakin tinggi prioritasnya. Untuk setiap f(x) akan dicatat dalam open sets. f(x) yang terkecil dalam open sets akan dihilangkan dan ditelusuri lebih lanjut ke node selanjutnya. Penelusuran akan berakhir saat node tujuan memiliki f terkecil (atau open sets kosong).

Program dengan Algoritma Dijkstra Berdasarkan kelas-kelas XNode, Vertex, dan Main kita dapat menerapkan algoritma ini.

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.

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);

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

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));

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);

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);

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()+",");