Kode MK/ Pemrograman Terstruktur 2 ZK Abdurahman Baizal KK Algoritma dan Komputasi Graf 1 8/25/2015
Pendahuluan Dalam bab ini kita akan membahas struktur data graf Struktur data graf banyak digunakan sebagai sebuah pemodelan banyak kasus dalam dunia nyata Jaringan Komputer Web Scheduling, dsb Dalam bab ini diasumsikan mahasiswa telah memahami definisi graf secara lebih detil dalam Matematika Diskrit 2 8/25/2015 IKG2A3/Pemrograman Terstruktur 2
Definisi Graf terdiri dari simpul (vertex) dan edge Informasi berada dalam nodes, dan edge merepresentasikan hubungan antar nodes Graf merupakan salah satu struktur data non linier 3 8/25/2015
Representasi Graf Untuk keperluan komputasi, graf perlu direpresentasikan dalam bentuk yang dikenali komputer Macam-macam representasi graf : Matriks ketetanggan Matriks kebersisian List ketetanggan Matriks ketetanggan paling sering digunakan, dan dalam bab ini akan dibahas representasi menggunakan matriks ketetanggaan 4 8/25/2015
Contoh v1 Matriks ketetanggaan: v4 v3 v2 1 2 3 4 1 0 1 0 1 2 1 0 1 1 3 0 1 0 1 4 1 1 1 0 5 8/25/2015
Contoh Matriks Ketetangaan v1 e2 v2 e1 e4 e3 v3 e5 1 0 2 2 3 1 1 2 3 2 0 1 1 1 2 6 8/25/2015
Contoh v3 v1 v2 v4 Matriks Ketetangaan 1 2 3 4 1 0 1 0 0 2 1 0 1 1 3 0 0 0 1 4 0 0 0 0 7 8/25/2015
Contoh v1 8 v2 Matriks Ketetangaan 1 2 3 4 9 v4 6 5 v3 1 ~ 2 ~ 3 5 4 ~ 8 ~ ~ ~ ~ ~ ~ ~ 9 6 ~ ~ 8 8/25/2015
List Ketanggaan v1 1 2 4 v4 v2 2 3 1 3 4 2 4 v3 4 1 2 3 9 8/25/2015
List Ketetanggaan v1 v2 1 2 2 1 3 4 v3 v4 3 4 4 Head 1 2 2 1 3 4 3 4 10 8/25/2015
List Ketetanggaan Untuk graf : A D E H e a d Bisa juga direpresentasikan sbb : A B C B C D E 11 8/25/2015
Traversal pada Graf DFS (Depth First Search) BFS (Breadth First Search). 1 DFS : 1 2 4 8 5 6 3 7 2 3 BFS : 1 2 3 4 5 6 7 8 4 5 6 7 8 12 8/25/2015
Traversal DFS dan BFS Kamus Umum {asumsi : penamaan simpul graf dikonversi menjadi bilangan bulat terurut dimulai dengan 1, contoh : 1, 2, 3, 4,... } Type ElmtMat : integer[0,1] Type Graf : array[1..jumsimpul][1..jumsimpul] of ElmtMat JumNode : integer {array untuk membedakan simpul yang telah diproses dengan yang belum} Visited : array [1..N] of boolean Array Visited diinisialisasi dengan False} 13 8/25/2015
Kamus (lanjutan) w: integer Q: Queue Procedure CreateQueue (output Q: Queue) {I.S. - F.S. Terdefinisi Q antrian kosong} Function IsEmptyQueue (Q: Queue) boolean {True jika Q antrian kosong, False jika tidak kosong} Procedure InsertQueue (input/output Q: Queue; input v: integer) {I.S. Terdefinisi Q (mungkin kosong) dan v adalah elemen yang akan disisipkan ke Q F.S. v telah disisipkan di Q} Procedure DeleteQueue (input/output Q: Queue; output v: integer) {I.S. Terdefinisi Q (tidak kosong) F.S. v adalah elemen yang dihapus dari Q} Procedure Process (input v: integer) {I.S. v adalah simpul yang akan diproses F.S. v telah diproses} 14 8/25/2015
Traversal DFS Procedure DFS (input v : integer) {I.S. Terdefinisi graf A, v adalah nomor dari simpul yang akan diproses F.S. Simpul dengan nomor v telah diproses} Kamus w: integer Procedure Process (input v: integer) {I.S. v adalah nomor dari simpul yang akan diproses 15 8/25/2015 F.S. Simpul dengan nomor v telah diproses} Algoritma Process(v) Visited[v] true for w 1 to N do if (A[v,w]=1) and (not Visited[w]) then DFS(w)
Traversal DFS Procedure BFS (input v : integer) {I.S. Terdefinisi A yaitu matriks ketetanggaan representasi sebuah graf, v adalah nomor dari simpul yang akan diproses F.S. v telah diproses} Kamus : w: integer Q: Queue 16 8/25/2015
Algoritma Process(v) Visited[v] true CreateQueue(Q) InsertQueue(Q,v) while not IsEmptyQueue(Q) do DeleteQueue(Q,v) for w 1 to N do if (A[v,w]=1) and (not Visited[w]) then {IsEmptyQueue(Q)} Process(w) InsertQueue(Q,w) Visited[w] true 17 8/25/2015
Topological Sort Topological Sort adalah pengurutan vertex dalam directed acyclic graph (graph berarah tanpa siklus), sedemikian hingga ada lintasan dari vi hingga vj secara berurutan Diberikan urutan partial dari elemen suatu himpunan, dikehendaki agar elemen yang terurut partial tersebut mempunyai keterurutan linier 18 8/25/2015
Topological Sort Contoh Dalam suatu kurikulum, suatu mata pelajaran mempunyai prerequisit mata pelajaran lain. Urutan linier adalah urutan untuk seluruh mata pelajaran dalam kurikulum Dalam suatu proyek, suatu pekerjaan harus dikerjakan lebih dulu dari pekerjaan lain (misalnya membuat fondasi harus sebelum dinding, membuat dinding harus sebelum pintu. Namun pintu dapat dikerjakan bersamaan dengan jendela. dsb 19 8/25/2015
Topological Sort Hasil Topological sort untuk graf di atas : v1, v2, v5, v4, v3, v7, v6 dan v1, v2, v5, v4, v7, v3, v6 20 8/25/2015
Topological Sort Pada dasarnya, langkah dalam topological sort : Temukan vertex dengan InDegree = 0 Print vertex Hapus vertex tersebut serta busurbusurnya 21 8/25/2015
Procedure topsort {IS : terdefinisi matriks ketetanggaan graf G FS : Top_num menyimpan hasil topological sorting} Kamus : counter, jum_vertex : integer v1,v2, w : vertex {didefinisikan type vertex : integer} Q : queue {list} function FindNewVertexOfIndegreeZero(Indegree:array of vertex) vertex {melakukan pencarian pada array indegree, yang nilainya = 0} function IsEmptyQueue(Q:Queue) boolean Procedure PushQueue(input/output Q:Queue ; input v1:vertex) Procedure PopQueue(input/output Q:Queue ; output v2:vertex) 22 8/25/2015
Algoritma : For counter 1 to jum_vertex do v1 FindNewVertexOfIndegreeZero(Indegree) PushQueue(Q,v1) If IsEmptyQueue(Q) then Output ( graph has a cycle ) Else While not (IsEmptyQueue(Q)) do PopQueue(Q,v) Top_num[counter] v; For (each w adjacent to v) do Indegree[w] indegree[w] 1 {Q empty} 23 8/25/2015
Topological Sort Indegree[ ] adalah array yang menyimpan indegree dari tiap vertex. Top_num[ ] adalah array yang menyimpan hasil topological sorting. 24 8/25/2015
Topological Sort Proses secara umum : Array indegree diisi dengan nilai indegree tiap vertex Untuk vertex-vertex dengan indegree = 0, masukkan ke queue While queue is not empty, sebuah vertex v dihapus dari queue dan semua busur-busur yang adjacent (berisisan) dengan vertex v diturunkan satu nilainya (Indegree(w) = Indegree 1, dengan w adalah vertex yang berhubungan dengan vertex v) 25 8/25/2015
Topological Sort Urutan yang dihasilkan : v1, v2, v5, v4, v3, v7, dan v6 26 8/25/2015
Latihan Buatlah fungsi-fungsi untuk menguji apakah suatu graf sederhana merupakan : Graf Kosong Graf Lengkap Graf Teratur Graf Lingkaran 27 8/25/2015
Latihan Diberikan sebuah graf a b c d f g i e h Hasil pengunjungan (traversal) BFS terhadap graf tersebut, dengan dimulai dari simpul a adalah (asumsi : penamaan simpul lebih kecil, lebih didahulukan. Contoh a lebih lebih dulu dari b, dsb): 28 8/25/2015
Referensi Liem, Inggriani., Diktat Kuliah IF2181 Struktur Data, ITB, 2003. Munir, Rinaldi., Matematika Diskrit, Edisi Kedua, Penerbit Informatika Bandung, Bandung, 2003 29 8/25/2015
30 8/25/2015 THANK YOU