• Tidak ada hasil yang ditemukan

GRAPH Matakuliah Algoritma dan Struktur

N/A
N/A
Protected

Academic year: 2018

Membagikan "GRAPH Matakuliah Algoritma dan Struktur"

Copied!
80
0
0

Teks penuh

(1)

GRAPH

Matakuliah Algoritma dan Struktur Data

(2)

Target Study

 Pengantar

 Definisi

 Contoh

 Istilah

 Jenis Graph

 Undirected Graph

 Directed Graph (Digraph)

(3)

Target Study Cont

 Representasi graph

 Adjacency Matrix

 Adjacency Lists

 Metode Penelusuran Graph

 DFS (Depth First Search) : Pencarian Mendalam

 BFS (Breadth First Search) : Pencarian Melebar

 Minimum Spanning Tree

 Algoritma Kruskal

(4)

DEFINISI GRAPH

 Graph adalah struktur data yang memiliki relasi many to many, yaitu tiap element dapat memiliki 0 atau lebih dari 1 cabang.

 Graph terbentuk dari 2 bagian, yaitu node dan edge.

 Node : digunakan untuk menyimpan data

(5)

DEFINISI GRAPH CONT

Graph adalah kumpulan dari simpul dan busur yang

secara matematis dinyatakan sebagai :

G = (V, E)

Dimana

G = Graph

(6)

Sebuah graph mungkin hanya terdiri dari satu

simpul

Sebuah graph belum tentu semua simpulnya

terhubung dengan busur

Sebuah graph mungkin mempunyai simpul yang

tak terhubung dengan simpul yang lain

Sebuah graph mungkin semua simpulnya saling

berhubungan

(7)

CONTOH GRAPH

 Jaringan pertemanan pada Facebook.

Toni Nina

Ale Firda

Joko

Riza

(8)

PENJABARAN

Jika =>

G = (N,E)

Dimana :

G

adalah Graph,

N

adalah Node, dan

E

adalah Edge.

Sehingga dari contoh graph facebook tersebut dapat dijabarkan:

N = {Nina, Toni, Ale, Riza, Joko, Firda}

E = {{Nina,Toni},{Toni,Riza},{Nina, Riza}, {Toni,Ale},

{Ale,Joko},{Riza,Joko},{Firda,Joko}}

*

N: para anggota Facebook

(9)

ISTILAH PADA GRAPH

Incident

Jika e merupakan busur dengan simpul-simpulnya adalah v dan w yang ditulis e=(v,w), maka v dan w disebut “terletak” pada e, dan e disebut incident dengan v dan w.

Degree (derajat)

(10)

Indegree

Jumlah busur yang kepalanya incident dengan simpul tersebut, atau

jumlah busur

yang “

masuk

atau menuju simpul tersebut.

Outdegree

Jumlah busur yang ekornya incident dengan simpul tersebut, atau

jumlah busur

yang “

keluar

atau berasal dari simpul tersebut.

(11)

Pada graph tidah berarah, 2 buah simpul disebut adjacent

bila ada busur yang menghubungkan kedua simpul

tersebut. Simpul v dan w disebut adjacent.

Pada graph berarah, simpul v disebut adjacent dengan

simpul w bila ada busur dari w ke v.

w e

v

v

e w

(12)

Successor dan Predecessor

Pada graph berarah, bila simpul v adjacent dengan simpul w, maka simpul v adalah successor simpul w, dan simpul w adalah predecessor dari simpul v.

Path

Sebuah path adalah serangkaian simpul-simpul yang berbeda, yang adjacent secara berturut-turut dari simpul satu ke simpul berikutnya.

1 4 3 2 4 2 4 2 4 2 1 3 1 3 1 3

(13)

B A C D E

Undirected graph

vertex

edge

e1 e4 e3

e7 e5 e2 e6 v1 v2 v4 v5 v3

V terdiri dari

v1, v2, …, v5

(14)

JENIS GRAPH

Graph dibedakan menjadi beberapa jenis, antara lain :

1.

Undirected Graph

2.

Directed Graph (Digraph)

(15)

UNDIRECTED GRAPH

 Biasa disingkat : undi-graph.

 Yaitu graph yang tidak memiliki arah.

 Setiap sisi berlaku dua arah.

 Misalkan : {x,y}

Arah bisa dari x ke y, atau y ke x.

 Secara grafis sisi pada undigraph tidak memiliki mata panah dan secara notasional menggunakan kurung kurawal.

(16)
(17)

Notasional

G = {V, E}

V = {A, B, C, D, E, F, G, H, I,J, K, L, M}

(18)

Contoh Undi-Graph

2

3 1

4

5

6

(19)

Directed Graph

Biasa disingkat : Di-graph.

Yaitu graph yang memiliki arah.

Setiap edge

Digraph

memiliki anak panah yang mengarah ke node

tertentu.

Secara notasi sisi digraph ditulis sebagai vektor (u, v).

u =

origin (vertex asal)

v =

terminus (vertex tujuan)

(20)
(21)

Notasional

G = {V, E}

V = {A, B, C, D, E, F, G, H, I,J, K, L, M}

E = {(A,B),(A,C), (A,D), (A,F), (B,C), (B,H), (C,E), (C,G), (C,H), (C,I), (D,E),

(22)

Contoh Digraph

2

3 1

4

5

6

(23)

GRAPH BERARAH DAN GRAPH TAK BERARAH

B A C D E B A C D E

Directed graph

Undirected graph

e1 e3 e4 e7 e5 e2 e6 v1 v2 v4 v5 v3 v1 v2 v3 v5 v4 e1 e2 e3 e4 e5 e6 e7 e8 e9 e10

(24)

GRAPH BERBOBOT (WEIGHTED GRAPH)

Jika setiap busur mempunyai nilai yang menyatakan hubungan

antara 2 buah simpul, maka busur tersebut dinyatakan memiliki

bobot.

Bobot sebuah busur dapat menyatakan panjang sebuah jalan dari

2 buah titik, jumlah rata-rata kendaraan perhari yang melalui

sebuah jalan, dll.

(25)

CONTOH WEIGTH GRAPH

B A

C E

F

D

2

2

2

4

(26)

GRAPH BERBOBOT

B A C D E B A C D E

Directed graph

Undirected graph

5 3 12 6 8 4 3 v1 v2 v4 v5 v3 v1 v2 v3 v5 v4 5 e2 3 12 8 3 6 4 7 10

(27)

Representasi Graph

 Representasi graph dibedakan menjadi 2 : 1. Adjacency Matrix

dapat direpresentasikan dengan matriks (array 2 Dimensi).

2. Adjacency Lists

(28)

Adjacency Matrix

Representasi Graph berupa Matrik ordo nxn. dimana n = node.

Baris berisi Node asal, sedangkan kolom berisi Node tujuan.

Jika graph tidak berbobot

,maka nilai matriks diisi dengan 1

atau 0. nilai 1 jika ada edge, dan 0 jika tidak ada edge antar

node.

A(i,j) = 1

, jika antara node i dan node j terdapat edge/terhubung.

(29)

Undi-graph

2 3 1 4 5

1 2 3 4 5 1

2 3 4 5

0 1 0 1 0

1 0 0 0 1

0 0 0 0 1

1 0 0 0 1

0 1 1 1 0

Diagonal entries are zero.

Adjacency matrix of an undirected graph is

symmetric.

A(i,j) = A(j,i) for all i and j.

i

(30)

Adjacency Matrix

2 3 1 4 5

1 2 3 4 5

1 2 3 4 5

0 1 0 1 0

1 0 0 0 1

0 0 0 0 1

1 0 0 0 1

0 1 1 1 0

i

(31)

Di-graph

 Dimungkinkan tidak simetris jika terdapat loop.

2

3

1

4

5

1 2 3 4 5 1

2 3 4 5

0 0 0 1 0

1 0 0 0 1

0 0 0 0 0

0 0 0 0 1

0 1 1 0 0

i

(32)

REPRESENTASI GRAPH DALAM BENTUK MATRIX

 Adjacency Matrix Graph tak berarah

0

1

0

1

0

1

0

1

0

1

0

1

0

1

1

1

0

1

0

1

0

1

1

1

0

B A C D E Graph A B A 0 B C

1 2 3 4 C D E

D E 0 1 2 4 3 Urut abjad

(33)

REPRESENTASI GRAPH DALAM BENTUK MATRIX

 Adjacency Matrix Graph berarah

0

1

0

1

0

1

0

1

0

1

0

1

0

1

1

0

0

1

0

1

0

0

0

0

0

Graph A B A 0 B C

1 2 3 4 C D E

(34)

REPRESENTASI GRAPH DALAM

BENTUK LINKED LIST

 Adjency List graph tak berarah

 Digambarkan sebagai sebuah simpul yang memiliki 2 pointer.

 Simpul vertex : Simpul edge :

info

info

Menunjuk ke simpul vertex berikutnya,

dalam untaian simpul yang ada.

Menunjuk ke simpul

edge pertama Menunjuk ke simpul edge berikutnya, bila

masih ada. Menunjuk ke simpul

vertex tujuan yang berhubungan dengan

simpul vertex asal.

(35)

Adjacency List

Direpresentasikan dengan linked list atau array.

Array list : array dua dimensi namun tidak ber-ordo nxn.

(36)

Array Lists

2

3

1

4

5

aList[1] = (2,4)

aList[2] = (1,5)

aList[3] = (5)

aList[4] = (5,1)

(37)

Adjacency Lists (Linked List)

2 3 1 4 5 aList [1] [5] [2] [3] [4] 2 4 1 5 5 5 1
(38)

 Define struct untuk sebuah simpul yang dapat digunakan sebagai vertex maupun edge.

typedef struct tipeS {

tipeS *Left;

int INFO;

tipeS *Right;

};

(39)

CONTOH : UNTUK VERTEX A, MEMILIKI 2 EDGE YANG

TERHUBUNG YAITU E1 DAN E2.

(40)
(41)
(42)

GRAPH BERARAH DAN BERBOBOT

B A C D E 5 3 2 14 12 6 7 12

0

5

0

2

0

6

0

3

0

0

0

0

0

0

9

0

0 12 0

7

0 14 0

0

0

A

A

0

B C

1 2 3 4

D E 0 1 2 4 3

B C D E

(43)
(44)

Metode Penelusuran

 Graph Traversal : Mengunjungi tiap simpul/node secara sistematik.

 Metode :

(45)

Algoritma BFS

BFS diawali dengan vertex yang diberikan, yang mana di level 0.

Dalam stage pertama, kita kunjungi semua vertex di level 1.

Stage kedua, kita kunjungi semua vertex di level 2. Disini vertex

baru, yang mana adjacent ke vertex level 1, dan seterusnya.

(46)

Langkah-langkah algoritma BFS

1) Masukkan simpul ujung (akar) ke dalam antrian

2) Ambil simpul dari awal antrian, lalu cek apakah simpul merupakan solusi 3) Jika simpul merupakan solusi, pencarian selesai dan hasil dikembalikan.

4) Jika simpul bukan solusi, masukkan seluruh simpul yang bertetangga dengan simpul tersebut (simpul anak) ke dalam antrian

5) Jika antrian kosong dan setiap simpul sudah dicek, pencarian selesai dan mengembalikan hasil solusi tidak ditemukan

(47)
(48)

Breadth First Search (BFS)

(49)
(50)

Contoh BFS

Diketahui sebuah kota, dengan memiliki inisial seperti yang ditunjukkan dibawah ini. Jarak antar kota dibentuk dengan sebuah graph

(51)

Pembahasan Contoh

Maka dengan menggunakan algoritma BFS, rute tercepat yang didapat adalah sebagai berikut:

1 – 2 – 3 – 4 – 5 – 6 – 7 – 8

1. Pertama-tama, pointer menunujuk pada daun yang ada sebelah kanan, yaitu no.2 (1 – 2)

2. Setelah itu, proses dilanjutkan pada tetangga no.2 yaitu no.3 (1-2-3) dan selanjutnya mengarah pada tetangga terdekat, yakni no.4 (1-2-3-4).

3. Pointer mencari tetangga no.4, namun karna tidak ada, maka pointer kembali ke kota no.2 dan masuk ke daun berikutnya, yakni no.5.

(52)

Depth First Search (DFS)

 Pada setiap pencabangan, penelusuran verteks-verteks yang belum dikunjungi dilakukan secara lengkap pada pencabangan pertama, kemudian

selengkapnya pada pencabangan kedua, dan seterusnya secara rekursif.

(53)
(54)

Depth First Search (DFS)

….

(55)

Algoritma DFS

Traversal dimulai dari simpul

v.

Algoritma:

1.

Kunjungi simpul

v,

2.

Kunjungi simpul

w

yang bertetangga dengan simpul

v.

3.

Ulangi

DFS mulai dari simpul w.

4.

Ketika mencapai simpul

u sedemikian sehingga

semua simpul

yang bertetangga dengannya telah dikunjungi, pencarian

dirunut-balik (

backtrack)

ke simpul terakhir yang dikunjungi

sebelumnya dan mempunyai simpul

w yang belum

dikunjungi.

5.

Pencarian berakhir bila tidak ada lagi simpul yang belum

(56)

Minimum Spanning Tree (MST)

Pencarian biaya yang minimum dari suatu graph sehingga membentuk pohon .

Syarat Graph yang dapat dicari minimum spanning treenya :

a. Graph harus terhubung b. Ruasnya punya bobot c. Graph tidak berarah

Algoritma yang dipakai untuk menentukan minimum spanning tree :

(57)

Aplikasi MST / Pohon Rentangan

Minimum

Dalam aplikasinya problem ini misalnya :

Hendak direntangkan jaringan kabel listrik yang

menghubungkan sejumlah lokasi dengan panjang kabel

yang digunakan sependek-pendeknya mungkin.

Melihat pengelompokan data yang tersebar pada suatu

ruang.

(58)

Algoritma Kruskal

 Himpunan sisi dari G diurutkan membesar sesuai bobot sisi tersebut.

 Buat T dengan memasukan 1 sisi terpendek dari G tersebut.

 Ulang (banyak sisi T = (banyak simpul G)-1)

 Ambil sisi selanjutnya dari G.

 Jika sisi itu tidak membuat sirkuit di T

 Masukan sisi itu ke T

(59)
(60)

Algoritma solin

Algoritma Solin untuk MST merupakan kebalikan dari algoritma Kruskal,

(61)
(62)
(63)
(64)
(65)
(66)
(67)
(68)
(69)
(70)
(71)

Operasi-operasi

Menggunakan adjacency matriks, operasi-operasinya sebagai berikut :

1. Deklarasi

2. Inisialisasi

3. Penambahan node

4. Penambahan edge

5. Menandai Node

6. Traversal

(72)

Contoh Program

 Deklarasi

public class AdjacencyMatriksGraph { private final int MAX_VERTS = 20; private Vertex vertexList[];

private int adjMat[][]; private int nVerts;

(73)

Contoh Program

 Inisialisasi

public AdjacencyMatriksGraph() // constructor {

vertexList = new Vertex[MAX_VERTS]; // adjacency matrix

adjMat = new int[MAX_VERTS][MAX_VERTS]; nVerts = 0;

for(int j=0; j<MAX_VERTS; j++) // set adjacency for(int k=0; k<MAX_VERTS; k++) // matrix to 0 adjMat[j][k] = 0;

(74)

Contoh Program

 Tambah Node

public void addVertex(char lab) {

(75)

Contoh Program

 Tambah Edge

public void addEdge(int start, int end)

{

(76)

Contoh Program

 Menandai Node

public int getAdjUnvisitedVertex(int v) {

for(int j=0; j<nVerts; j++)

if(adjMat[v][j]==1 && vertexList[j].wasVisited==false) return j;

(77)

 DFS

public void dfs() // depth-first search { // begin at vertex 0

vertexList[0].wasVisited = true; // mark it displayVertex(0); // display it

theStack.push(0); // push it

while( !theStack.isEmpty() ) // until stack empty, {

int v = getAdjUnvisitedVertex( theStack.peek() ); if(v == -1) // if no such vertex,

theStack.pop();

else // if it exists, {

vertexList[v].wasVisited = true; displayVertex(v); // display it theStack.push(v); // push it }

} // end while

for(int j=0; j<nVerts; j++) // reset flags vertexList[j].wasVisited = false;

(78)

 BFS

public void bfs() // breadth-first search { // begin at vertex 0

vertexList[0].wasVisited = true; // mark it displayVertex(0); // display it

theQueue.insert(0); // insert at tail int v2;

while( !theQueue.isEmpty() ) {

int v1 = theQueue.remove();

// until it has no unvisited neighbors

while( (v2=getAdjUnvisitedVertex(v1)) != -1 ) { // get one,

vertexList[v2].wasVisited = true; // mark it displayVertex(v2); // display it

theQueue.insert(v2); // insert it } // end while

} // end while(queue not empty) // queue is empty, so we're done

for(int j=0; j<nVerts; j++) // reset flags vertexList[j].wasVisited = false;

(79)

Contoh Program

 Display Node

public void displayVertex(int v) {

(80)

Daftar Pustaka

Kadir, Abdul. 2013. Teori dan Aplikasi Struktur

Data menggunakan C++. Yogyakarta : Penerbit

ANDI

Sartaj Sahni ,

“Data

Structures & Algorithms

”,

Presentation L20-24.

Mitchell Waite,

“Data

Structures & Algorithms in

Gambar

GAMBAR UNDI-GRAPH
Gambar Digraph
Gambar di atas dapat disusun dengan lebih sederhana, sbb :
Gambar (a) BFS(1): 1, 2, 3, 4, 5, 6, 7, 1.Gambar (b) BFS(1): 1, 2, 3, 4, 5, 6, 7, 1Gambar (c) BFS(1): 1, 2, 3, 4, 5, 6, 7, 8, 9

Referensi

Dokumen terkait

Setelah menjelaskan bagaimana kedua masjid tersebut, terdapat keunggulan yang kita temui di mana jarang sekali kita jumpai di masjid lainnya. Masjid Jogokariyan

Bagian kedua komposisi menggunakan birama 4/4 dengan tempo sedang diawali dengan keyboard kemudian disusul dengan vokal dan semua instrumen di bait kedua lagu.

Maka dari itu akan dilakukan perbandingan terhadap kedua algoritma tersebut pada jaringan Local Area Network (LAN) di beberapa komputer untuk mengetahui algoritma

Semua data dibandingkan terhadap data pertama, jika data pertama lebih besar dari data kedua maka kedua data ditukar. Pada iterasi pertama data paling kecil ada di urutan

Ketika kita membuat suatu program tanpa prosedur maka seluruh statement yang terdapat di dalam program utama akan dieksekusi secara beruntun (sequential) dari

Berdasarkan data pada tabel di atas, dapat kita ketahui bahwa pada model pembelajaran SCL (Student Center Learning) untuk matakuliah algoritma dan pemrograman unsur – unsur

Pada penelitian ini metode Algoritma Genetika dipadu- kan dengan metode Constraint Satisfaction Problem, di- mana kromosom yang dihasilkan pada metode Algoritma Genetika dapat

Semua vertex dari obyek yang dimodelkan di atas masih berada pada satu bidang z=0, atau obyek yang dimodelkan masih berupa model 2D karena kita hanya memberikan vertex