Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Pertemuan-2 Kriteria kebaikan suatu algoritme Correctness

Presentasi serupa


Presentasi berjudul: "Pertemuan-2 Kriteria kebaikan suatu algoritme Correctness"— Transcript presentasi:

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

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

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 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 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 Apakah problem statement sudah benar?
Bagaimana bila x muncul lebih dari sekali? 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 Amount of work done Banyaknya pekerjaan yang dilakukan oleh algoritme
Perlu dicari ukuran yang dapat: Mengukur efisiensi dari metode Cukup precise Cukup umum Bagaimana dengan execution time? Tergantung pada tipe komputer Tergantung pada bahasa pemrograman Tergantung pada gaya programmer

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 Banyaknya pekerjaan yang dilakukan:
menggambarkan kompleksitas algoritme tergantung pada ukuran 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 Penelusuran binary tree Banyaknya node dalam tree

10 Worst-case complexity
Banyaknya operasi dasar yang maksimal 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 Average-case complexity
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 p(I) = peluang kemunculan input I

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 Secara rata-rata, separuh list akan diperiksa untuk menemukan x.

13 Average-case: ( x tidak harus ada dalam list)
Andaikan Ii, 1 ≤ i ≤ n, merepresentasikan kasus dimana x berada pada indeks i, In+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(In+1) = 1-q, t(In+1) = 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+1)/ 2 + (1-q) n Pada kasus dimana x dipastikan ada di list, berarti q = 1 sehingga A(n) = (n+1)/2, seperti sebelumnya.

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

15 Simplicity/ clarity Seringkali cara yang simple bukanlah yang efisien
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 Jika suatu program akan digunakan secara berulang-ulang, maka faktor efisiensi harus lebih diperhatikan

16 Optimality 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 Sembarang algoritme yang melakukan operasi sejumlah batas bawah tersebut berarti optimal

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. 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 Contoh: Kelas algoritme: Operasi dasar:
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 Algoritme FindMax Input : L, list dari bilangan
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 Pembandingan 2 dilakukan pada baris-3, dieksekusi sebanyak (n-1) kali
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 (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. Karena W(n) = F(n), maka algoritme ini optimal

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

23 Tentukan W(n) dan A(n) dari algoritme di atas.
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] cij := 0; [4] for k := 1 to n do cij := cij + aik bkj end [5] end [6] end Tentukan W(n) dan A(n) dari algoritme di atas. Periksa apakah algoritme tersebut optimal

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

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

26 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 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 Faktor konstanta dpt diabaikan
3n3 nanodtk n nanodtk 10 3 mikrodtk 200 milidtk 100 3 milidtk 2 detik 1000 3 detik 20 detik 2500 50 detik 10000 49 menit 3,2 menit 95 tahun 5,4 jam

28 Aturan Umum 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 contoh: for i := 1 to n do for j := 1 to n do k := k+1; RT = O(n2)

29 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; RT = O(n2)

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

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

32 T(n) = c1(n) + c2(n-1) + c3(n-1) + c4 (∑tj)
+ 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) T(n) = A n2 + B n + C = O(n2)

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

34 selesai


Download ppt "Pertemuan-2 Kriteria kebaikan suatu algoritme Correctness"

Presentasi serupa


Iklan oleh Google