Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

1 Pertemuan-2 Kriteria kebaikan suatu algoritme Correctness Correctness Amount of work done Amount of work done Amount of space used Amount of space used.

Presentasi serupa


Presentasi berjudul: "1 Pertemuan-2 Kriteria kebaikan suatu algoritme Correctness Correctness Amount of work done Amount of work done Amount of space used Amount of space used."— Transcript presentasi:

1 1 Pertemuan-2 Kriteria kebaikan suatu algoritme Correctness Correctness Amount of work done Amount of work done Amount of space used Amount of space used Simplicity/ clarity Simplicity/ clarity Optimality Optimality

2 2 Correctness Dua aspek dalam algoritme (selain input dan output) yang perlu dibuktikan kebenarannya adalah: Metode solusi: Metode solusi:  Pembuktian formal : teorema, induksi matematika  Pembuktian informal : simulasi manual Implementasi: Implementasi:  Program kecil : mudah  Program besar : sulit, karenanya perlu dipecah menjadi beberapa modul

3 3 Contoh: Sequential Search Algorithm Pernyataan Masalah: Mencari lokasi/ indeks dari x dalam list. Algoritme tsb. membandingkan x dengan setiap entri satu persatu sampai ketemu atau tidak ada lagi yang dapat dibandingkan Jika x tidak ada dalam list, maka jawaban- nya = 0

4 4 Algoritme Sequential Search Input: L : list dengan n elemen, berindeks 1 … n x : item yang akan dicari dalam L Output: Indeks, yaitu lokasi x dalam L 0, jika x tidak ditemukan

5 5 Algoritme Sequential Search [1] indeks := 1; [2] while indeks ≤ n and L[indeks] ≠ x do [3] indeks := indeks + 1 [4] end {while} [5] if indeks > n then indeks :=0

6 6 Apakah problem statement sudah benar? Bagaimana bila x muncul lebih dari sekali? Bagaimana bila x muncul lebih dari sekali? Berapa nilai n yang diperbolehkan? Berapa nilai n yang diperbolehkan? Revisi Pernyataan Masalah: Diberikan suatu list L berisi n item (n ≥ 0) dan nilai x, maka algoritme akan berhenti dengan nilai indeks = indeks dari kemunculan pertama x di L, jika x ada di L, atau = 0, bila x tidak ada di L

7 7 Amount of work done Banyaknya pekerjaan yang dilakukan oleh algoritme Perlu dicari ukuran yang dapat: Mengukur efisiensi dari metode Mengukur efisiensi dari metode Cukup precise Cukup precise Cukup umum Cukup umum Bagaimana dengan execution time? Tergantung pada tipe komputer Tergantung pada tipe komputer Tergantung pada bahasa pemrograman Tergantung pada bahasa pemrograman Tergantung pada gaya programmer Tergantung pada gaya programmer

8 8 Diukur dengan banyaknya operasi dasar yang dilakukan oleh algoritme tersebut Masalah Operasi dasar Mencari x dalam list Pembandingan x dengan setiap entri dalam list Penggandaan 2 matriks Perkalian dua bilangan Penjumlahan dua bilangan Mengurutkan elemen dalam list Pembandingan antara 2 entri dalam list Penelusuran binary tree Menelusuri link

9 9 Banyaknya pekerjaan yang dilakukan: menggambarkan kompleksitas algoritme menggambarkan kompleksitas algoritme tergantung pada ukuran input tergantung pada ukuran input tergantung pada tipe input tergantung pada tipe input Masalah Ukuran input Mencari x dalam list Banyaknya entri dalam list Penggandaan 2 matriks Ukuran matriks Mengurutkan elemen dalam list Banyaknya entri dalam list Penelusuran binary tree Banyaknya node dalam tree

10 10 Worst-case complexity Banyaknya operasi dasar yang maksimal Banyaknya operasi dasar yang maksimal Batas atas dari banyaknya pekerjaan yang dilakukan oleh algoritme Batas atas dari banyaknya pekerjaan yang dilakukan oleh algoritme W(n) = maks { t(I), I Є Dn}, dengan: Dn = himpunan dari input yang berukuran n t(I) = banyaknya operasi dasar yang dilakukan pada input I, I Є Dn

11 11 Average-case complexity Banyaknya operasi dasar yang dilakukan secara rata-rata Banyaknya operasi dasar yang dilakukan secara rata-rata A(n) = ∑ p (I) t (I), I Є Dn, dengan: Dn = himpunan dari input yang berukuran n t(I) = banyaknya operasi dasar yang dilakukan pada input I dilakukan pada input I p(I) = peluang kemunculan input I

12 12 W(n) dan A(n) sequential search Worst-case: W(n) = n Kasus terburuk terjadi bila x berada di paling ujung atau x tidak ada dalam list Average-case: (diasumsikan x ada dalam list) Andaikan Ii, 1 ≤ i ≤ n, merepresentasikan kasus dimana x berada pada indeks i, p(Ii) adalah peluang x berada di posisi i, serta t(Ii) adalah banyaknya pembandingan yang dilakukan bila x berada di posisi i, maka: p(Ii) = 1/n, t(Ii) = i. A(n) = ∑ p (I) t (I) = ∑ i/ n = 1/ n ∑ i = (n+1)/2 A(n) = ∑ p (I) t (I) = ∑ i/ n = 1/ n ∑ i = (n+1)/2 Secara rata-rata, separuh list akan diperiksa untuk menemukan x.

13 13 Average-case: ( x tidak harus ada dalam list) Andaikan Ii, 1 ≤ i ≤ n, merepresentasikan kasus dimana x berada pada indeks i, I n+1 adalah kasus dimana x tidak berada dalam list, q adalah peluang x ada dalam list, p(Ii) adalah peluang x berada di posisi i, serta t(Ii) adalah banyaknya pembandingan yang dilakukan bila x berada di posisi i, maka: p(Ii) = q/n, t(Ii) = i, p(I n+1 ) = 1-q, t(I n+1 ) = n. A(n) = ∑ p (I) t (I) = ∑ i q/ n + (1-q) n A(n) = ∑ p (I) t (I) = ∑ i q/ n + (1-q) n = q/ n ∑ i + (1-q) n= q/ n n(n+1)/2 + (1-q) n = q/ n ∑ i + (1-q) n= q/ n n(n+1)/2 + (1-q) n = q(n+1)/ 2 + (1-q) n = q(n+1)/ 2 + (1-q) n Pada kasus dimana x dipastikan ada di list, berarti q = 1 sehingga A(n) = (n+1)/2, seperti sebelumnya. sehingga A(n) = (n+1)/2, seperti sebelumnya.

14 14 Amount of space used Banyaknya memori yang digunakan tergantung pada implementasi. Perlu diperhitungkan hal-hal yang memakan memori: instruksi instruksi konstanta konstanta variabel variabel manipulasi data manipulasi data penyimpanan informasi penyimpanan informasi representasi data representasi data

15 15 Simplicity/ clarity Seringkali cara yang simple bukanlah yang efisien Seringkali cara yang simple bukanlah yang efisien Namun faktor kesederhanaan tetap diperlukan, oleh karena dapat memudahkan verifikasi kebenaran algoritme, koreksi atau modifikasi Namun faktor kesederhanaan tetap diperlukan, oleh karena dapat memudahkan verifikasi kebenaran algoritme, koreksi atau modifikasi Pada saat memilih algoritme, perlu diperkirakan waktu yang diperlukan untuk mengoreksi program/ mendebug program Pada saat memilih algoritme, perlu diperkirakan waktu yang diperlukan untuk mengoreksi program/ mendebug program Jika suatu program akan digunakan secara berulang-ulang, maka faktor efisiensi harus lebih diperhatikan Jika suatu program akan digunakan secara berulang-ulang, maka faktor efisiensi harus lebih diperhatikan

16 16 Optimality Suatu algoritme dikatakan optimal pada worstcase- nya jika tidak ada algoritme lain yang sekelas yang melakukan lebih sedikit operasi dasar Suatu algoritme dikatakan optimal pada worstcase- nya jika tidak ada algoritme lain yang sekelas yang melakukan lebih sedikit operasi dasar Bagaimana cara memeriksa optimalitas algoritme? Tentukan batas bawah dari jumlah operasi yang diperlukan untuk menyelesaikan masalah Tentukan batas bawah dari jumlah operasi yang diperlukan untuk menyelesaikan masalah Sembarang algoritme yang melakukan operasi sejumlah batas bawah tersebut berarti optimal Sembarang algoritme yang melakukan operasi sejumlah batas bawah tersebut berarti optimal

17 17 Untuk memeriksa optimalitas algoritme Buat algoritme yang efisien (A). Analisis A dan tentukan sebuah fungsi W, sedemikian sehingga A mengerjakan paling banyak W(n) langkah pada worst-casenya. Dhi, n adalah ukuran input. Buat algoritme yang efisien (A). Analisis A dan tentukan sebuah fungsi W, sedemikian sehingga A mengerjakan paling banyak W(n) langkah pada worst-casenya. Dhi, n adalah ukuran input. Untuk beberapa fungsi F, buktikan teori yang menyatakan bahwa sembarang algoritme dalam kelas yang dipelajari, terdapat ukuran input n yang menyebabkan algoritme tersebut melakukan paling sedikit F(n) langkah Untuk beberapa fungsi F, buktikan teori yang menyatakan bahwa sembarang algoritme dalam kelas yang dipelajari, terdapat ukuran input n yang menyebabkan algoritme tersebut melakukan paling sedikit F(n) langkah Jika W = F, maka algoritme A optimal pada worst-casenya. Jika W ≠ F, mungkin terdapat algoritme yang lebih baik atau ada batas bawah yang lebih baik.

18 18 Contoh: Masalah mencari elemen terbesar dalam list yang berisi n buah bilangan Kelas algoritme: Algoritme yang dapat membandingkan dan menyalin entri tapi tidak melakukan operasi terhadap entri-entri tersebut. Operasi dasar: Pembandingan 2 entri dalam list

19 19 Algoritme FindMax Input : L, list dari bilangan n ≥ 1 adalah banyaknya entri n ≥ 1 adalah banyaknya entri Output : max, entri terbesar dalam L [1] max := L[1]; [2] for indeks := 2 to n do [3] if max < L[indeks] then [4] max := L[indeks] [5] end [6] end

20 20 Pembandingan 2 dilakukan pada baris-3, dieksekusi sebanyak (n-1) kali. Dengan demikian (n-1) adalah batas atas dari banyaknya pembandingan yang diperlukan untuk menemukan max pada worst-case. Jadi W(n) = n-1 Pembandingan 2 dilakukan pada baris-3, dieksekusi sebanyak (n-1) kali. Dengan demikian (n-1) adalah batas atas dari banyaknya pembandingan yang diperlukan untuk menemukan max pada worst-case. Jadi W(n) = n-1 Apakah terdapat algoritme lain yang lebih baik? Asumsi: semua entri dalam list berbeda, sehingga terdapat (n-1) buah entri yang tidak maksimum. Suatu entri bukan maksimum hanya jika entri tersebut lebih kecil dari sedikitnya sebuah entri yang lain

21 21 (n-1) buah entri ini ‘kalah’ dalam pembandingan yang dilakukan oleh algoritme tsb. (n-1) buah entri ini ‘kalah’ dalam pembandingan yang dilakukan oleh algoritme tsb. Padahal dalam setiap pembandingan, hanya ada 1 yang kalah, sehingga sedikitnya (n-1) pembandingan yang harus dikerjakan. Jadi F(n)= n-1 adalah batas bawah jumlah pembandingan yang diperlukan. Padahal dalam setiap pembandingan, hanya ada 1 yang kalah, sehingga sedikitnya (n-1) pembandingan yang harus dikerjakan. Jadi F(n)= n-1 adalah batas bawah jumlah pembandingan yang diperlukan. Karena W(n) = F(n), maka algoritme ini optimal Karena W(n) = F(n), maka algoritme ini optimal

22 22 Contoh: Masalah Penggandaan Matriks A=(a ij ) dan B=(b ij ) adalah matriks yang berukuran nxn dengan entri bilangan nyata. Hitung matriks C = A.B, dgn C=(c ij ) Kelas algoritme: Algoritme yang dapat melakukan perkalian, pembagian, penjumlahan dan pengurangan pada entri-entri matriks dan hasil antaranya Operasi dasar: Perkalian

23 23 Berikut ini adalah algoritme untuk menggandakan matriks A dan B (masing-masing berukuran nxn) menghasilkan matriks C. [1] for i := 1 to n do [2] for j := 1 to n do [3] c ij := 0; [4] for k := 1 to n do c ij := c ij + a ik b kj end [5] end [6] end Tentukan W(n) dan A(n) dari algoritme di atas. Tentukan W(n) dan A(n) dari algoritme di atas. Periksa apakah algoritme tersebut optimal Periksa apakah algoritme tersebut optimal

24 24 Batas atas : W(n) = n 3, A(n) = n 3 Batas bawah : terdapat bukti bahwa F(n)=n 2 Kesimpulan: tidak dapat disimpulkan algoritme perkalian matriks adalah optimal Fakta: Terdapat algoritme yang melakukan n penggandaan, sehingga algoritme yang pertama terbukti tidak optimal

25 25 Bagaimana menghitung kompleksitas algoritme? Contoh : Algoritme untuk menghitung ∑ i 3 begin [1] temp := 0; 1 [2] for i := 1 to n do 3n [3] temp := temp + (i*i*i); 4n [4] sum := temp; 1 end total: 7n+2

26 26 Pada contoh di atas, diperoleh T(n) = 7n+2 ≈ 7n Pada contoh di atas, diperoleh T(n) = 7n+2 ≈ 7n Dhi, konstanta 2 dapat diabaikan untuk n yang cukup besar. Lebih lanjut konstanta 7 juga dapat diabaikan Dhi, konstanta 2 dapat diabaikan untuk n yang cukup besar. Lebih lanjut konstanta 7 juga dapat diabaikan Metode yang dapat digunakan untuk membandingkan atau mengklasifikasikan fungsi-fungsi dengan mengabaikan faktor konstanta dan input yang kecil adalah laju pertumbuhan asimtot/ laju pertumbuhan fungsi Metode yang dapat digunakan untuk membandingkan atau mengklasifikasikan fungsi-fungsi dengan mengabaikan faktor konstanta dan input yang kecil adalah laju pertumbuhan asimtot/ laju pertumbuhan fungsi

27 27 Faktor konstanta dpt diabaikan n 3n 3 nanodtk n nanodtk 10 3 mikrodtk 200 milidtk milidtk 2 detik detik 20 detik detik menit 3,2 menit tahun 5,4 jam

28 28 Aturan Umum Untuk loop : RT maks = RT dari statement dalam loop dikalikan dengan banyaknya iterasi Untuk loop : RT maks = RT dari statement dalam loop dikalikan dengan banyaknya iterasi Nested loop : RT dari statement dikalikan hasil perkalian banyaknya iterasi pada semua loop terkait Nested loop : RT dari statement dikalikan hasil perkalian banyaknya iterasi pada semua loop terkait contoh: for i := 1 to n do for j := 1 to n do k := k+1; RT = O(n 2 ) contoh: for i := 1 to n do for j := 1 to n do k := k+1; RT = O(n 2 )

29 29 Statement yang berurutan; diambil yang terbesar contoh: for i := 1 to n do a[i] := 0; for i := 1 to n Statement yang berurutan; diambil yang terbesar contoh: for i := 1 to n do a[i] := 0; for i := 1 to n for j := 1 to n do a[i] := a[j] + i + j; for j := 1 to n do a[i] := a[j] + i + j; RT = O(n 2 ) RT = O(n 2 )

30 30 Insertion_Sort(A) 1. for j := 2 to length[A] do 2. key := A[j] {memasukkan A[j] ke dalam array A[1…j-1] yang sudah diurutkan} 3. i := j-1 4. while i > 0 dan A[i] > key do 5. A[i+1] := A[i] 6. i := i-1 7. A[i+1] := key

31 31 Berapa kompleksitasnya? cost time cost time for j := 2 to length[A] do c1 n key := A[j] c2 n -1 key := A[j] c2 n -1 {memasukkan A[j] ke dalam array A[1…j-1] yang sudah diurutkan} {memasukkan A[j] ke dalam array A[1…j-1] yang sudah diurutkan} i := j-1 c3 n -1 i := j-1 c3 n -1 while i > 0 dan A[i] > key do c4 ∑ tj while i > 0 dan A[i] > key do c4 ∑ tj A[i+1] := A[i] c5 ∑ (tj-1) A[i+1] := A[i] c5 ∑ (tj-1) i := i-1 c6 ∑ (tj-1) i := i-1 c6 ∑ (tj-1) A[i+1] := key c7 n - 1 A[i+1] := key c7 n - 1 tj adalah banyaknya test pada while loop yang dikerjakan

32 32 T(n) = c1(n) + c2(n-1) + c3(n-1) + c4 (∑tj) + c5 (∑(tj-1)) + c6 (∑(tj-1)) + c7(n-1) + c5 (∑(tj-1)) + c6 (∑(tj-1)) + c7(n-1) T(n) = c1(n) + c2(n-1) + c3(n-1) + c4 (n(n+1)/2 - 1) + c5 (n(n-1)/2) + c6 (n(n-1)/2) + c7(n-1) + c5 (n(n-1)/2) + c6 (n(n-1)/2) + c7(n-1) T(n) = A n 2 + B n + C = O(n 2 )

33 33 Insertion_Sort(A) 1. for j := 2 to length[A] do 2. key := A[j] {memasukkan A[j] ke dalam array A[1…j-1] yang sudah diurutkan} 3. i := j-1 4. while i > 0 dan A[i] > key do 5. A[i+1] := A[i] 6. i := i-1 7. A[i+1] := key Gunakan algoritme di atas untuk mengurutkan : Tuliskan detil langkah-langkahnya.

34 34


Download ppt "1 Pertemuan-2 Kriteria kebaikan suatu algoritme Correctness Correctness Amount of work done Amount of work done Amount of space used Amount of space used."

Presentasi serupa


Iklan oleh Google