praktikum asdl

13
Praktikum ASDL Pertemuan III – Shortest Path

Upload: marina

Post on 23-Jan-2016

77 views

Category:

Documents


0 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Praktikum ASDL

Praktikum ASDL

Pertemuan III – Shortest Path

Page 2: Praktikum ASDL

Jenis-jenis Algoritma

Algoritma Dijkstra

Algoritma Bellman-Ford

Algoritma A*

Algoritma Floyd-Warshall

Algoritma Johnson

Page 3: Praktikum ASDL

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.

Page 4: Praktikum ASDL

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.

Page 5: Praktikum ASDL

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

Page 6: Praktikum ASDL

Program dengan Algoritma Dijkstra Berdasarkan kelas-kelas XNode,

Vertex, dan Main kita dapat menerapkan algoritma ini.

Page 7: Praktikum ASDL

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.

Page 8: Praktikum ASDL

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

Page 9: Praktikum ASDL

XNode

Tambahkan atribut: private Node nod

Buat setter dan getter untuk atribut tersebut.

Buat konstruktor untuk atribut node dan panjang.

Page 10: Praktikum ASDL

Main

Buat vector dengan nama listNode yang hanya dapat menyimpan objek dari Node.

Masukkan 6 objek Node ke dalam vectorVector<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));

Page 11: Praktikum ASDL

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

Page 12: Praktikum ASDL

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

Page 13: Praktikum ASDL

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 xNode.getNode().setNil(nodSkr.getNil()+xNode.getPanjang()); if(inc == 0){ nodNext = xNode.getNode(); inc++; }else if(xNode.getNode().getNil() < nodNext.getNil()) nodNext = xNode.getNode(); } nodSkr.setKunjung(true); nodSkr = nodNext; listPath.add(nodSkr); } for(Node nod : listPath) System.out.print(nod.getLabel()+",");