Modul 5 Algoritma & Struktur Data

Slides:



Advertisements
Presentasi serupa
STRUKTUR DATA (10) tree manipulation
Advertisements

ALGORITMA GREEDY : MINIMUM SPANNING TREE
Pencarian ( Searching)
Latihan Algoritma Greedy
TEORI ALGORITMA.
STRUKTUR DASAR ALGORITMA
Bahan Kuliah IF2211 Strategi Algoritma
Contoh soal penyegaran
Algoritma Greedy (lanjutan)
BAB 9 POHON.
PART 4 TREE (POHON) Dosen : Ahmad Apandi, ST
Design and Analysis Algorithm
Z Bekti - Rita - Sevenhot Struktur Data & Algoritma 2009.
5. Pohon Merentang Minimum
Pertemuan 23 Minimum Cost Spanning Tree
BAB 9 POHON.
Pertemuan 24 BRANCH AND BOUND (2)
STRUKTUR DATA tree manipulation
Pertemuan-2 Kriteria kebaikan suatu algoritme Correctness
Algoritma Brute Force Oleh: Muhammad Musta’in ( )
Penyelidikan Operasi Penyelesaian Numerik
Algoritma Greedy (lanjutan)
MATERI PERKULIAHAN ANALISIS ALGORITMA
Algoritma Pencarian (searching)
Fak. Teknologi Industri
Pokok Bahasan 5 Algoritma Pemrosesan Paralel
TREE STRUCTURE (Struktur Pohon)
KUG1A3 Algoritma& Pemrograman
TEORI GRAPH (LANJUTAN)
Algoritma Greedy.
Algoritma Greedy Team Fasilkom.
CSG3F3/ Desain dan Analisis Algoritma
Bahan Kuliah IF2211 Strategi Algoritma Oleh: Rinaldi Munir
P O H O N ( T R E E ) Fitri Utaminingrum
Matematika Diskrit Kode Huffman Heru Nugroho, S.Si., M.T.
TERAPAN POHON BINER.
MATERI PERKULIAHAN ANALISIS ALGORITMA
Pertemuan 25 MERANCANG ALGORITMA DENGAN KOMPLEKSITAS TERTENTU
Algoritma dan Struktur Data Lanjut
Greedy Pertemuan 7.
BAB 10: POHON DAN APLIKASINYA
STRUKTUR DASAR ALGORITMA
STRUKTUR DASAR ALGORITMA
MATERI PERKULIAHAN ANALISIS ALGORITMA
Pertemuan 12 METODA GREEDY lanjutan….
Algoritma Greedy (lanjutan)
ALGORITMA GREEDY, KRUSKAL, MINIMUM SPANNING TREE
MATERI PERKULIAHAN ANALISIS ALGORITMA
Algoritma Runut-balik (Backtracking)
Kuliah ke 6 Strategi Algoritma
Algoritma dan Struktur Data Lanjut
Analisis Algoritma dan Struktur Data
Algoritma Prim Algoritma Kruskal Algoritma Dijkstra
TEL 2112 Dasar Komputer & Pemograman Contoh Pemecahan Masalah
Modul 6 : Analisis Algoritma dan Struktur Data
STRUKTUR DATA Struktur Data Graf.
P O H O N ( T R E E ) Fitri Utaminingrum
Matematika Diskrit Semester Ganjil TA Kode Huffman.
ALGORITMA GRAF.
P O H O N ( T R E E ) Fitri Utaminingrum
TUGAS MATEMATIKA DISKRIT KELAS B (POHON) Engelinus Nana ( ) Eka Christy ( ) Engelinus Nana ( ) Eka Christy ( )
Algoritma Greedy Wahyul Wahidah Maulida, ST., M.Eng.
Modul 4 : Analisis Algoritma & Struktur Data
Algoritma Brute Force.
ALGORITMA GREEDY : MINIMUM SPANNING TREE
Pohon Biner.
HEAP Bella Wulan N. | Ester Prenatalia A. Mutiara Fitri T. | Risang Nihapsari Purwaning M.S KOMSI 2018 DEFINISI HEAP ALGORITMA HEAP.
Algoritma Runut-balik (Backtracking)
Anyquestion?.
Aplikasi Graph Minimum Spaning Tree Shortest Path.
Transcript presentasi:

Modul 5 Algoritma & Struktur Data Greedy Algorithm Modul 5 Algoritma & Struktur Data Copyright @suarga

Definisi Greedy Algorithm adalah algoritma “rakus” dimana pada setiap langkahnya hanya memilih solusi terbaik, kalau mungkin optimal. Kondisi yang harus dipenuhi: Terdapat kumpulan kandidat penyelesaian (solusi) Ada suatu cara/fungsi yang bisa memeriksa apakah satu kandidat betul merupakan solusi atau bukan Ada fungsi seleksi yang bisa memilih kandidat terbaik Ada sesuatu yang ingin dioptimalkan dalam persoalan yang dihadapi / ada objective function Copyright @suarga

Pseudo-code fungsi Greedy(C : set)  set { C adalah himpunan dari semua kandidat } defenisi variabel S : set; { S adalah himpunan solusi terbaik } langkah penyelesaian S  ; while not solution(S) and C   do x  max(element(C)) C  C – {x} if feasible(S  {x}) then S  S  {x}; while_end if solution(S) then return S else return “no solutions exist” Copyright @suarga

Contoh 1: Activity Selector Diberikan himpunan kegiatan K = {1,2,..,n}, masing-masing kegiatan membutuhkan resources, carilah kegiatan dari K yang bisa menggunakan resources secara optimal. Contoh ada sebuah studio dan ada 11 kegiatan yg akan menggunakannya, s(i) adalah waktu awal dan f(i) waktu akhir, cari kegiatan2 yang optimal i 1 2 3 4 5 6 s(i) f(i) 7 8 9 10 11 12 13 14 Copyright @suarga

fungsi Greedy_Activity_Selector(s, f) set { s dan f adalah vektor waktu mulai s dan waktu selesai f } definisi variabel A : set; { A adalah set penyelesaian } n : integer; i, j : integer; Langkah penyelesaian n length(s); A  {1}; j  1; for i  2 to n do if s(i)  f(j) then A  A  {i}; j  i; end_for return A; Copyright @suarga

n  length(s); hasilnya 11 Mula-mula A = {1}, j = 1 Mulai dari i=2 hingga n cari kegiatan yang sesuai yaitu bila s(i) >= f(j) i=2, s(2)=3, f(1)=4, karena s(2) < f(1), maka K(2) bukan solusi i=3, s(3)=0, f(1)=4, karena s(3) < f(1), maka K(3) bukan solusi i=4, s(4)=5, f(1)=4, karena s(4) > f(1), maka K(4) adalah solusi, sehingga A={1, 4}, dan j=4, f(4)=7 K(5), K(6), K(7) bukan solusi i=8, s(8)=8, jadi s(8)>f(4) maka K(8) adalah solusi sehingga A={1,4,8}, j=8, f(8)=11 K(9) dan K(10) bukan solusi i=11, s(11)=12, jadi s(11)>f(8), maka K(11) adalah solusi sehingga A={1,4,8,11} Solusi akhir adalah A={1,4,8,11} Bagaimana kompleksitasnya? Copyright @suarga

Contoh 2 : Service time Andaikan ada sebuah meja pelayanan (server, mesin bubut, prosessor, pompa bensin, dsb) akan melayani N pelanggan, dimana setiap pelanggan i dilayani selama t(i), carilah urutan pelayanan sehingga total waktunya minimum. Contoh: N=3, t(1) = 5, t(2) = 10, t(3) = 3 Tabel urutan pelayanan dan waktu-nya sebagai berikut: Copyright @suarga

Urutan total waktu 1-2-3 5 + (5 + 10) + (5 + 10 + 3) = 38 1-3-2 5 + (5 + 3) + (5 + 3 + 10) = 31 2-1-3 10 + (10 + 5) + (10 + 5 + 3) = 43 2-3-1 10 + (10 + 3) + (10 + 3 + 5) = 41 3-1-2 3 + (3 + 5) + (3 + 5 + 10) = 29 3-2-1 3 + (3 + 10) + (3 + 10 + 5) = 34 Urutan yang optimal (waktu pelayanan minimum adalah 3-1-2 dengan waktu = 29 Copyright @suarga

fungsi Greedy_Service_Ti me(C : set)  set { C adalah himpunan dari semua pelanggan } defenisi variabel S : set; { S adalah himpunan solusi terbaik } langkah penyelesaian S  ; while not solution(S) and C   do x  min(element(C)) C  C – {x} if feasible(S  {x}) then S  S  {x}; while_end if solution(S) then return S else return “no solutions exist” Copyright @suarga

fungsi Greedy_Service_Time( vektor: t) set { u adalah vektor urutan, t vektor waktu} definisi variabel A : set; { A adalah set penyelesaian } i, j, n : integer; u, v : vektor; Langkah penyelesaian n length(t); for i=1 to n : u(i) = i; end_for { sort ascending vektor waktu } for i = 1 to (n-1) : for j=i+1 to n if (t(j) < t(i) ) x = t(i): t(i)=t(j): t(j) = x x = u(i): u(i)=u(j): u(j) = x endif end_for: end_for for i=1 to n : A = A ⊔ {u(i)} : end_for return A. Copyright @suarga

Contoh 3: Huffman’s Code Salah satu cara untuk meng-kompressi teks adalah dengan memakai Huffman’s code Pertama frekuensi keberadaan karakter/huruf dalam teks harus diketahui Karakter dengan frekuensi tertinggi diberi kode huffman terpendek, misalnya 1 bit, karakter lain diberi bit lebih panjang sesuai dengan urutan frekuensi-nya Kode Huffman dapat di-implementasi dalam bentuk pohon biner terbalik Copyright @suarga

Algoritma-nya akan dibentuk sbb: Andaikan C = {c(i):f(i)} , karakter dan frekuensi-nya Akan dibentuk binary-tree Q, dimana z adalah root dari sub-tree, x adalah subtree kiri, dan y adalah subtree kanan Mula-mula bentuk node z, kemudian x adalah karakter dgn f(i) minimum yang diekstrak dari C, y adalah karakter dgn f(i) minimum berikutnya. Node z memiliki frekuensi f(x) + f(y) Langkah terakhir diatas dilakukan hingga diperoleh nilai frekuensi dari z = 100 (%) Copyright @suarga

{ membentuk binary tree dari kode Huffman } definisi Variabel fungsi Huffman(C) { membentuk binary tree dari kode Huffman } definisi Variabel Q : queue; i : int; x, y, z : node; Langkah penyelesaian n  length(C); Q  C; for i  1 to (n-1) do z  New Node(); x  left[z]  Extract_Min(Q); y  right[z]  Extract_Min(Q); f[z]  f[x] + f[y]; Insert(Q, z); endfor; return Extract_min(Q); Copyright @suarga

awal : C = [ a:45, b:13, c:12, d:16, e:9, f:5] Q dibentuk dari C, menjadi [ f:5, e:9, c:12, b:13, d:16, a:45] bentuk node z(1), ambil x = f:5, dan y=e:9 sehingga f[z(1)] = 14, sekarang Q = [c:12, b:13, z(1):14, d:16, a:45] / \ f:5 e:9 bentuk node z(2), ambil x=c:12, dan y=b:13 sehingga f[z(2)]=25, sekarang Q = [ z(1):14, d:16, z(2):25, a:45] / \ / \ f:5 e:9 c:12 b:13 bentuk node z(3), ambil x=z(1):14, dan y=d:16 sehingga f[z(3)]=30, sekarang Q = [z(2):25, z(3):30, a:45] / \ / \ c:12 b:13 z(1):14 d:16 / \ Copyright @suarga

6.bentuk node z(4), ambil x=z(2):25, dan y=z(3):30 sehingga f[z(4)]=55 sekarang Q = [a:45, z[4]:55 ] / \ z(2):25 z(3):30 / \ / \ c:12 b:13 z(1):14 d:16 / \ f:5 e:9   7.Terakhir bentuk node z(5), ambil x=a:45, dan y=z(4):55, sehingga f[z(5)]=100, sekarang binary tree-nya adalah Q sebagai berikut: z(5): 100 0 / \ 1 a:45 z(4):55 0/ \ 1 z(2):25 z(3):30 0/ \ 1 0 / \ 1 0 / \ 1 f:5 e:9 berarti Huffman kode untuk karakter tersebut adalah: a ==> 0; b ==> 101; c ==> 100; d ==> 111; e ==> 1101; f ==> 1100 Copyright @suarga

Kompleksitasnya bagaimana ? Iterasi dilakukan (n-1) kali Setiap iterasi adalah membentuk binary tree dengan kompleksitas heap adalah O(log n) Secara keseluruhan kompleksitas adalah (n-1)log(n) atau O(n log n) Copyright @suarga

Contoh 4: Minimum Spanning Tree Diberikan graf G = <N, E>, carilah lintasan terpendek yang menghubungkan semua node dalam graf tersebut. Ada berbagai algoritma “minimum spanning tree”, seperti Kruskal, Dijkstra, dan Prim Pada contoh ini kita pilih algoritma Kruskal Algoritma Kruskal dimulai dengan mengurutkan semua edge secara ascending, sehingga mudah mencari edge minimum Copyright @suarga

fungsi Kruskal(G=<N,E>:graph; length:real E) set of edges { mencari himpunan edge T yang menghubungkan semua node N dari graph G dimana total panjang T minimal } definisi variabel n : int; T : set of edges; u, v : edge; rincian langkah Sort(E menurut panjang, ascending); n  #N; T  ; Inisialisasi n set, dengan komponen dari N; while (#T < n-1) {u, v}  minimum(E) yang belum diambil; komponen_u  Find(u); komponen_v  Find(v); if (komponen_u  komponen_v) Merge(komponen_u, komponen_v); T  T  {{u, v}}; endif endWhile return T; Copyright @suarga

G = <7, 12> 1 2 3 6 5 4 7 1 2 4 6 4 5 6 3 8 7 4 3 Copyright @suarga

Urutan panjang edge sebagai berikut: {1,2}=1; {2,3}=2; {4,5}=3; {6,7}=3; {1,4}=4; {2,5}=4; {4,7}= 4; {3,5}=5; {2,4}=6; {3,6}=6; {5,7}=7; {5,6}=8. Step Edge Pilihan Koneksi Komponen Initialization - {1} {2} {3} {4} {5} {6} {7} 1 {1,2} {1,2} {3} {4} {5} {6} {7} 2 {2,3} {1,2,3} {4} {5} {6} {7} 3 {4,5} {1,2,3} {4,5} {6} {7} 4 {6,7} {1,2,3} {4,5} {6,7} 5 {1,4} {1,2,3,4,5} {6,7} 6 {2,5} rejected 7 {4,7} {1,2,3,4,5,6,7} Copyright @suarga

Bagaimana Kompleksitas-nya ? 1 2 3 6 5 4 7 1 2 4 6 4 5 6 3 8 7 4 3 Bagaimana Kompleksitas-nya ? Copyright @suarga