Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Modul 5 Algoritma & Struktur Data

Presentasi serupa


Presentasi berjudul: "Modul 5 Algoritma & Struktur Data"— Transcript presentasi:

1 Modul 5 Algoritma & Struktur Data
Greedy Algorithm Modul 5 Algoritma & Struktur Data

2 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

3 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”

4 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

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

6 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?

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

8 Urutan total waktu (5 + 10) + ( ) = (5 + 3) + ( ) = (10 + 5) + ( ) = (10 + 3) + ( ) = (3 + 5) + ( ) = (3 + 10) + ( ) = 34 Urutan yang optimal (waktu pelayanan minimum adalah dengan waktu = 29

9 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”

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

11 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

12 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 (%)

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

14 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: 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 / \

15 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: z(4):55 0/ \ 1 z(2): z(3):30 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

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

17 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

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

19 G = <7, 12> 1 2 3 6 5 4 7 1 2 7 4 3

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

21 Bagaimana Kompleksitas-nya ?
1 2 3 6 5 4 7 1 2 7 4 3 Bagaimana Kompleksitas-nya ?


Download ppt "Modul 5 Algoritma & Struktur Data"

Presentasi serupa


Iklan oleh Google