• Tidak ada hasil yang ditemukan

Algoritma dan Struktur Data GRAF

N/A
N/A
Protected

Academic year: 2021

Membagikan "Algoritma dan Struktur Data GRAF"

Copied!
73
0
0

Teks penuh

(1)

GRAF

Teknik Informatika Universitas Muhammadiyah Malang 2016

(2)

OUtline

• Perbedaan tree dan graf • Contoh gambar graf

• Istilah pada graf • Penelusuran graf

(3)

Definisi

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

• Sama seperti Tree, Graph terbentuk dari 2 bagian, yaitu node dan edge (Cabang).

• Node : digunakan untuk menyimpan data

• Edge : cabang, untuk menghubungkan node satu dengan node lain.

(4)

Contoh Graph

• Jaringan pertemanan pada Facebook.

Toni Nina Ale Firda Joko Riza

Graph dengan 6 node dan 7 edge yang merepresentasikan jaringan pertemanan pada Facebook

(5)

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}}

*Node : para anggota Facebook

Edge : relasi pertemanan antara anggota satu dengan yang lain.

(6)

Jenis Graph

• Graph dibedakan menjadi beberapa jenis, antara lain :

1. Undirected Graph

2. Directed Graph (Digraph) 3. Weigth Graph

(7)

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.

(8)
(9)

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},

{D,F}, {D,G}, {D,K}, {D,L}, {E,F}, {G,I}, {G,K}, {H,I}, {I,J}, {I,M}, {J,K},

(10)

Contoh Undi-Graph

2 3 1 4 5 6 7

(11)

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)

(12)
(13)

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

(D,F), (D,G), (D,K), (D,L), (E,F), (G,I), (G,K), (H,I), (I,J), (I,M), (J,K), (J,M), (L,K), (L,M)}.

(14)

Contoh Digraph

2 3 1 4 5 6 7

(15)

Weigth Graph

• Graph yang memiliki bobot, yaitu pada tiap edge-nya memiliki nilai.

(16)

Contoh Weigth Graph

B A C E F D 2 2 2 4 4 5

(17)

Loop

• Digraph dapat memiliki edge dari dan menuju ke node itu sendiri (Self-edge). Hal ini dikenal dengan istilah loop. 5 3 7 1 4 2 6 Self-edge/loop LEGAL

(18)

Peta Penelusuran Kota

(Berdasarkan Jarak)

• Node = Tempat Wisata

• edge = jalur • Weight = jarak 2 3 8 10 1 4 5 9 11 6 7 4 8 6 6 7 5 2 4 4 5 3

(19)

Peta kota

• Some streets are one way.

2 3 8 10 1 4 5 9 11 6 7

(20)

Graf Property

• Jumlah Edge • Degree

• Jumlah Vertex Degree • In-Degree

(21)

Jumlah Edge

• Jumlah pasangan edge yang mungkin (banyak maksimal edge) dapat dilihat dari jumlah node (n).

• Dibedakan menjadi 2 : untuk undi-graph dan

di-graph.

• Undi-graph : (lebih kecil sama dengan ) <= n(n-1)/2 • Di-graph : (lebih kecil sama dengan ) <= n(n-1)

(22)

Contoh

• Undi-graph

jumlah maks edge : 3

• Di-graph

jumlah maks edge : 6 dengan loop : 9

n = 3

(23)

Degree

• Degree : jumlah cabang atau jumlah edge yang dimiliki node. Berlaku untuk undirect-graph. 2 3 1 4 5 6 7 degree(2) = 2, degree(5) = 3, degree(3) = ??? degree(7) = ???

(24)

Jumlah Degree

• Jumlah degree adalah jumlah total cabang/degree yang ada pada graph.

• Rumus =

2e

(dimana e adalah jumlah edge)

Jumlah Degree = 6

8

10

9

(25)

Degree pada Di-graph?

• Degree (4) =??? • Degree (7) = ??? 2 3 8 10 1 4 5 9 11 6 7

(26)

In-Degree

Jumlah edge yang masuk atau mengarah ke Node.

indegree(2) = 1, indegree(7) = 2, indegree(1)=???

2 3 1 4 5 6 7

(27)

Out-Degree

Jumlah edge yang keluar dari Node.

outdegree(2) = 1, outdegree(7) = 0, outdegree(1) = ???

2 3 1 4 5 6 7

(28)

Degree pada Di-graph?

• In-Degree (4) = 0 • Out-Degree (7) = 2 2 3 8 10 1 4 5 9 11 6 7

(29)

Representasi Graph

• Representasi graph dibedakan menjadi 2 : 1. Adjacency Matrix

dapat direpresentasikan dengan matriks (array 2 Dimensi).

2. Adjacency Lists

dapat direpresentasikan dengan array (bukan berupa matriks) maupun linked list.

(30)

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.

• Jika graph berbobot, maka nilai matriks diisi dengan bobot dari edge. A(i,j) = nilai bobot.

(31)

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

(32)

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.

(33)

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

(34)

Adjacency List

• Direpresentasikan dengan linked list atau array.

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

(35)

Array Lists

2 3 1 4 5 aList[1] = (2,4) aList[2] = (1,5) aList[3] = (5) aList[4] = (1,5) aList[5] = (2,3,4)

(36)

Adjacency Lists (Linked List)

2 3 1 4 5 aList [1] [5] [2] [3] [4] 2 4 1 5 5 5 1 2 4 3

(37)

Latihan

1. Gambarkan graph dari

(38)
(39)
(40)

2. Representasikan dengan adjacency

list & adjacency matrix

B A C E F D 2 2 2 4 4 5 1

(41)

3.

Representasikan dengan

adjacency list & adjacency matrix

Toni Nina Ale Firda Joko Riza

(42)
(43)

Metode Penelusuran

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

• Metode :

– DFS (Depth First Search) : Pencarian Mendalam – BFS (Breadth First Search) : Pencarian Melebar

(44)

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. Penelusuran BFS berakhir ketika setiap vertex selesai

(45)

Breadth First Search (BFS)

(46)

Breadth First Search (BFS)

….

(47)

Algoritma BFS

• Traversal dimulai dari simpul v. • Algoritma:

1. Kunjungi simpul v,

2. Kunjungi semua simpul yang bertetangga dengan simpul v terlebih dahulu.

3. Kunjungi simpul yang belum dikunjungi dan bertetangga dengan simpul-simpul yang tadi dikunjungi, demikian seterusnya.

(48)

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.

(49)

Depth First Search (DFS)

(50)

Depth First Search (DFS)

….

(51)

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 dikunjungi yang dapat dicapai dari simpul yang telah

(52)

Latihan

• Telusuri graph disamping dengan mengunakan BFS dan DFS. Secara berturut-urut root

dimulai dari 1,2,3 dan 4. • Bandingkan hasilnya!

(53)

Latihan

2. Telusuri dengan BFS dan DFS! root : node 1 2 3 8 1 4 5 9 6 7

(54)

Latihan

3. Telusuri dengan BFS dan DFS! root : node 1 2 3 8 10 1 4 5 9 11 6 7

(55)
(56)

Operasi-operasi

Menggunakan adjacency matriks, operasi-operasinya sebagai berikut :

1. Deklarasi+Inisialisasi 2. Penambahan node 3. Penambahan edge 4. Visitasi Node 5. Traversal 6. Display node

(57)

Deklarasi+Inisialisasi

• Langkah-langkah untuk memulai deklarasi sekaligus inisilisasi sbb :

1. Membuat class utama (main class) 2. Membuat class vertex

3. Membuat class Stack 4. Membuat class Queue 5. Deklarasi variabel

(58)

Contoh Program

• Class stack

class StackX {

private final int SIZE = 20; private int[] st;

private int top;

public StackX() // constructor {

st = new int[SIZE]; // make array top = -1;

}

public void push(int j) // put item on stack { st[++top] = j; }

public int pop() // take item off stack { return st[top--]; }

public int peek() // peek at top of stack { return st[top]; }

public boolean isEmpty() // true if nothing on stack-{ return (top == -1); }

(59)

Contoh Program

• Class Queue

class Queue {

private final int SIZE = 20; private int[] queArray;

private int front; private int rear; public Queue() {

queArray = new int[SIZE]; front = 0;

rear = -1; }

public void insert(int j) { if(rear == SIZE-1)

rear = -1;

queArray[++rear] = j; }

public int remove() {

int temp = queArray[front++]; if(front == SIZE)

front = 0; return temp; }

public boolean isEmpty() {

return ( rear+1==front || (front+SIZE-1==rear) ); }

(60)

Contoh Program

• Class vertex digunakan untuk menyimpan node/vertex.

• Terdiri dari 2 variabel yaitu label (untuk menyimpan data pada node) dan wasVisited (untuk menandai sebuah node sudah/telah dikunjugi).

class Vertex {

public char label; // label (e.g. 'A') public boolean wasVisited;

public Vertex(char lab) // constructor {

label = lab;

wasVisited = false; }

(61)

Contoh Program

• Deklarasi class utama (main class). Misalkan nama class adalah AdjacencyMatriksGraph, maka program-nya dapat dilihat seperti

dibawah ini :

• Didalam class inilah perintah operasi yang lain ditulis.

public class AdjacencyMatriksGraph {

(62)

Contoh Program

• Deklarasi variabel terdiri dari :

1. Deklarasi variabel stack 2. Deklarasi variabel queue 3. Deklarasi variabel vertex

4. Deklarasi variabel matriks (berupa array 2D) 5. Deklarasi variabel MAX_VERTEX (untuk

menyimpan maksimum jumlah node)

6. Deklarasi variabel nVerts (untuk menyimpan jumlah node yang telah di-create)

(63)

Contoh Program

• Variabel-variabel tersebut dideklarasikan didalam class AdjacencyMatriksGraph.

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

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

private StackX theStack; private Queue theQueue;

(64)

Contoh Program

• Constructor pada main class digunakan untuk proses 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;

theStack = new StackX(); theQueue = new Queue(); }

(65)

Tambah Node

• Proses tambah node dilakukan dengan cara membuat new object dari class vertex.

• Ketika terjadi penambahan node baru nilai variabel nVerts ditambah 1 (increment 1). • Contoh program berupa method addVertex

sbb:

public void addVertex(char lab) {

vertexList[nVerts++] = new Vertex(lab); }

(66)

Tambah Edge

• Proses penambahan Edge dilakukan dengan cara mengakses variabel matriks. Kemudian ditentukan titik asal dan tujuan yang berupa index. Index ini mewakili tiap node yang telah di-create.

• Untuk undi-graph, pengaksesan dengan

index[start][end] atau [end][start] bernilai sama. Sedangkan untuk graph yang tidak berbobot

diberikan nilai 1 jika ada edge. • Contoh program :

public void addEdge(int start, int end) {

adjMat[start][end] = 1; adjMat[end][start] = 1; }

(67)

Visitasi Node

• Visitasi Node adalah proses mengunjungi node.

• Pada program node yang dikunjungi ditandai dengan perubahan nilai false menjadi true untuk variabel

wasVisited yang diakses melalui object vertex.

• Node yang telah dikunjungi tidak akan dikunjungi lagi.

• Contoh program :

public int getAdjUnvisitedVertex(int v) {

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

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

return -1; }

(68)

Display Node

• Display Node adalah proses menampilkan data Node yang dikunjungi.

• Contoh program :

public void displayVertex(int v) {

System.out.print(vertexList[v].label); }

(69)

Traversal

• Traversal adalah proses penelusuran Node. • Dibedakan menjadi 2 :

– DFS – BFS

(70)

• Contoh program : DFS Traversal

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;

(71)

• Contoh program : BFS Traversal

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;

(72)

• Main Method :

public static void main(String[] args) {

AdjacencyMatriksGraph theGraph = new AdjacencyMatriksGraph(); theGraph.addVertex('4');//0 theGraph.addVertex('3');//1 theGraph.addVertex('1');//2 theGraph.addVertex('2');//3 theGraph.addEdge(0,1); theGraph.addEdge(1,2); theGraph.addEdge(1,3); System.out.print("Visits bfs: ");

theGraph.bfs(); // breadth-first search System.out.println();

System.out.print("Visits dfs: ");

theGraph.dfs(); // depth-first search System.out.println();

} // end main() }

(73)

Pustaka

• Sartaj Sahni , “Data Structures & Algorithms”, Presentation L20-24.

• Mitchell Waite, “Data Structures & Algorithms in Java”, SAMS, 2001

Gambar

Gambar Undi-Graph
Gambar Digraph

Referensi

Dokumen terkait

Struktur ini sebenarnya merupakan bentuk khusus dari struktur tree yang lebih umum, setiap orang tua hanya memiliki dua anak sehingga disebut pohon biner (binary

Struktur adalah koleksi dari variabel yang dinyatakan dengan sebuah nama, dengan sifat setiap variabel dapat memiliki tipe yang berlainan. Struktur

Pada matakuliah Algoritma dan Struktur Data II ini, lebih menitik beratkan pada struktur datanya, yaitu membahas macam-macam struktur data baik yang linear maupun yang

Graf tak-berbobot adalah graf yang tidak memiliki bobot pada simpulnya, atau untuk setiap sisi yang menghubungkan setiap simpul memiliki bobot yang sama (sehingga bisa diabaikan)..

Pohon merentang (Spanning Tree) Pohon merentang dapat dibentuk dari sebuah graf G dengan cara menghapuskan sebuah sisi dari setiap sirkuit yang ada sehingga graf tidak

Mengingat kembali array, struktur, pointer dalam bahasa C 1.1 Pengenalan Struktur Data Struktur data adalah sebuah skema organisasi, seperti struktur dan array, yang diterapkan pada

Representasi data  Bagaiamana merepresentasikan data di dalam memori utama memory struktur data → suffix tree, prefix tree, graph  Bagaimana menangani kompleksitas data biologi →

Summary  Struktur data + Algoritma = Program  Pemilihan struktur data dan algoritma yang tepat dapat membuat program lebih efisien, mudah, dan