30
Bab 3 Pengantar Analisa Algoritma

Analisa Algoritma

Embed Size (px)

DESCRIPTION

pemrograman

Citation preview

  • Bab 3

    Pengantar Analisa Algoritma

  • Tujuan PembelajaranMahasiswa mampu menjelaskan pengertian analisis algoritma dan istilah2 yang terkait yaitu best case, average case dan worst case,Mahasiswa mampu menjelaskan keunggulan algoritma yang efisien dibandingkan dengan kecepatan komputerMahasiswa mampu menganalisis algoritma, dari sisi waktu komputasi dan kebutuhan memori

  • PendahuluanSuatu permasalahan memungkinkan untuk diselesaikan dengan lebih dari satu algoritma (pendekatan)Bagaimana kita memilih satu diantara beberapa algoritma tersebut. Bagaimana kita mengukur efisiensi dari algoritma tersebut ?

  • Mengukur Efisiensi :Perbandingan Empiris: Run ProgramAnalisis Algoritma (Asimptotis)

  • Kesulitan Perbandingan Empiris :Diperlukan usaha pemrograman dan pengujian yang lebih banyakPenulisan program yang berbeda memungkinkan menghasilkan kualitas program yang berbedaPemilihan kasus-kasus uji empiris mungkin tidak selalu sesuai untuk semua algoritma yang diuji.

  • Sumberdaya kritis suatu program running-time (waktu eksekusi program), sehingga kita harus menganalisa waktu yang diperlukan untuk me-run program (algoritma). ruang (memory, space- memori utama dan memori tambahan) yang diperlukan untuk me-run program. Ruang yang diperlukan ini sangat berkaitan dengan struktur data yang digunakan.

  • Faktor yang mempengaruhi running-time Lingkungan dimana program itu dijalankan, yang antara lain meliputi kecepatan CPU, bus dan perangkat keras pendukung yang lain. Persaingan dengan user lain pada jaringan juga bisa memperlambat waktu eksekusi. Bahasa pemrograman dan kualitas kode yang dihasilkan oleh kompiler juga dapat memberikan pengaruh yang signifikan. Kemampuan pemrogram yang menerjemahkan algoritma ke kode program juga berpengaruh.

  • Analisis Algoritma Analisis algoritma asimptotis (asymptotic algorithm analysis) mengukur efisiensi suatu algoritma berdasar-kan ukuran input (yang biasanya besar), karena running-time suatu algoritma sebagian besar tergantung pada ukuran input. Teknik ini lebih bersifat estimasiPertimbangan utama ketika mengestimasi performansi suatu algoritma adalah jumlah operasi dasar (basic operation) yang diperlukan untuk oleh algoritma untuk memproses suatu input dengan ukuran (size)

  • Analisa Algoritma (lanjutan)Pertimbangan utama ketika mengestimasi performansi suatu algoritma adalah jumlah operasi dasar (basic operation) yang diperlukan untuk oleh algoritma untuk memproses suatu input dengan ukuran (size) Running time dinyatakan dalam T(n) untuk fungsi T pada input dengan ukuran n

  • Contoh:Diberikan suatu algoritma untuk menemukan nilai terbesar dalam suatu array yg berisi n integer positip

    Misalkan c jumlah waktu yang diperlukan untuk menguji suatu nilai dalam fungsi ini, termasuk didalamnya waktu yang diperlukan untuk increment nilai i dll, maka T(n) = cn static int largest(int[ ] A, int n) { // Dapatkan nilai terbesar int currlarge = 0; // inisialisasi nilai terbesar saat ini for (int i=0; i currlarge) // nilai terbesar saat ini berubahcurrlarge=A[i]; return currlarge; // return nilai terbesar }

  • Contoh 2Misal cuplikan kode program sebagai berikut

    Maka, T(n) = c2 n2

    sum = 0;for(i=1;i

  • Best, Worst dan Average Cases Untuk beberapa algoritma, input yang berbeda dapat memerlukan jumlah waktu yang berbeda. Sebagai ilustrasi, misalkan kita ingin mencari suatu elemen array (posisi) yang memuat nilai K dan algoritma akan berhenti jika nilai K ditemukan. Dengan pencarian secara sekuensialBest case: 1Worst case: nAverage case: n/2

  • Best, Worst dan Average CasesBest caseUmumnya kita tidak digunakan karena jarang terjadi dan terlalu optimistik untuk karakteristik umum dari running-time suatu algoritma.

    Worst caseBisa diketahui secara pasti bahwa paling buruk algoritma akan memerlukan proses sebanyak kasus terburuk ini. Analisa ini juga sangat penting digunakan untuk aplikasi real-time (waktu-nyata)

    Average case Menyatakan perilaku umum suatu algoritma bila diberikan input dengan ukuran n

  • Komputer Lebih Cepat vs Algoritma Lebih Cepat Apa yang terjadi jika kita membeli komputer baru yang mempunyai kecepatan 10 kali lebih cepat (misal dapat memproses 100.000 input dalam satu satuan waktu) dibandingkan komputer lama (misal dapat memproses 10.000 input)?Pada kasus tertentu, penambahan kecepatan komputer kurang berpengaruh pada jumlah input yang diproses. Mengapa?

  • Komputer Lebih Cepat vs Algoritma Lebih Cepatn' = n: ukuran input yang dapat diproses dalam satu detik pada komputer 1n: ukuran input yang dapat diproses dalam satu detik pada komputer 2

    T(n)nn'Perubahann'/n10n1.00010.000n' = 10n1020n5005.000n' = 10n105n log n2501.842< n' < 10n 7,372n2702233,162n1316n' = n + 3--

  • Growth Rate Graph

  • Analisis Asimptotis: Batas Atas (Big-Oh) Definisi : T(n) adalah anggota dari himpunan (f(n)) jika ada dua konstanta positip c dan n0 sedemikian hingga | T(n) | c | f(n) | untuk semua n > n0

    Definisi ini memberikan arti bahwa untuk semua himpunan data yang cukup besar (yaitu n > n0) algoritma akan selalu mengeksekusi lebih kecil dari c | f(n) | step pada best, average dan worst case.

  • Contoh-contohContoh 2.4:Jika T(n) = 3n2 maka T(n) ada dalam O(n2). Demikian juga, T(n) ada dalam O(n3), O(n4) dan seterusnya, sehingga yang kita pilih adalah batas atas terkecil (least upper bound).

    Contoh 2.5:Mencari nilai K yang disimpan dalam suatu array.T(n) = csn/2Untuk semua nilai n > 1, |csn/2| cs |n|Sehingga, dengan definisi, T(n) adalah anggota O(n) untuk n0 = 1 dan c = cs

  • Contoh-contoh:Contoh 2.6 :Diketahui T(n) = c1n2 + c2n pada average case. Dapatkan O(f(n))|c1 n2 + c2n| |c1n2 + c2n2 | (c1 + c2) | n2 | untuk semua n > 1, sehingga, | T(n) | c |n2| untuk c = c1 + c2 dan n0 = 1Jadi, dengan definisi, T(n) adalah anggota dari O(n2).

    Contoh 2.7 : T(n) = c adalah anggota dari O(1).

  • Batas Bawah : Big-Omega

    Definisi : T(n) adalah anggota dari himpunan (g(n)) jika ada dua konstanta positip c dan n0 sedemikian hingga | T(n) | c | g(n) | untuk semua n > n0 Definisi ini memberikan arti bahwa untuk semua himpunan data yang cukup besar (yaitu n > n0) algoritma akan selalu mengeksekusi lebih besar dari c|g(n)| step pada best, average dan worst case.

  • ContohDiketahui T(n) = c1n2 + c2n pada average case. Dapatkan (g(n))|c1n2 + c2n| c1|n2| untuk semua n > 1Sehingga, |T(n)| c|n2| untuk c=c1 dan n0=1Jadi, berdasarkan definisi, T(n) adalah anggota dari (n2).Demikian juga, T(n) juga merupakan anggota dari (n) dan (1). Pada kasus ini yang kita pilih adalah batas bawah terbesar (greatest lower bound).

  • Big-ThetaDefinisi :Suatu algoritma dikatakan anggota (h(n)) jika algoritma itu adalah anggota O(h(n)) dan anggota (h(n))

    Contoh 2.9 :Karena T(n) = c1n2 + c2n adalah angota O(n2) dan anggota (n2), maka T(n) adalah anggota (n2).

  • Contoh:

  • Aturan Simplifikasi

    Ketika kita menentukan persamaan running time suatu algoritma, kita akan menentukan bentuk yang paling sederhana, sehingga diperlukan aturan-aturan penyederhanaan untuk ketiga big-Oh, big-Omega dan big-Theta

  • Beberapa Aturan Penyederhanaan:Jika f(n) adalah anggota O(g(n)) dan g(n) adalah anggota O(h(n)), maka f(n) adalah anggota O(h(n)).Jika f(n) adalah anggota O(kg(n)) untuk konstanta k > 0, maka f(n) adalah anggota O(g(n)).Jika f1(n) adalah anggota O(g1(n)) dan f2(n) adalah anggota O(g2(n)), maka (f1+ f2)(n) adalah anggota O(max(g1(n), g2(n))).Jika f1(n) adalah anggota O(g1(n)) dan f2(n) adalah anggota O(g2(n)), maka f1(n) f2(n) adalah anggota O(g1(n) g2(n)).

    Aturan ini juga berlaku untuk big-omega dan big-theta.

  • *Time Complexity Examples (1)Contoh 3.9: a = b;

    This assignment takes constant time, so it is (1).

    Contoh 3.10:

    sum = 0;for (i=1; i

  • *Time Complexity Examples (2)Contoh 3.11:

    sum = 0;for (j=1; j

  • *Time Complexity Examples (3)Contoh 3.12:

    sum1 = 0;for (i=1; i

  • *Time Complexity Examples (4)Contoh 3.13:

    sum1 = 0;for (k=1; k

  • Statement Control yang lain?Perhitungan running time dapat dinyatakan secara garis besar sebagai berikut :Untuk loop while, perhitungannya sama dengan loop forStatemen if lebih besar daripada then/else, mungkin melibatkan probabilitas karena adanya penyeleksian kondisiRekursifitas: diselesaikan dengan relasi berulangSubrotine call: Kompleksitas dari subroutine yang dipanggil

    Slide berikutnya

    **Asymptotic analysis is defined for equations. We need to convert programs to equations to analyze them.

    The traditional notation is (1), not (c).(n) even though the value of sum is n2.**First statement is (1). Double for loop is i = (n2). Final for loop is (n). Result: (n2).**First loop, sum is n2. Second loop, sum is (n+1)(n)/2. Both are (n2).

    **First loop is n for k = 1 to log n, or (n log n).

    Second loop is 2k for k = 0 to log n - 1, or (n).