• Tidak ada hasil yang ditemukan

Pengantar Analisa Algoritma

N/A
N/A
Protected

Academic year: 2021

Membagikan "Pengantar Analisa Algoritma"

Copied!
29
0
0

Teks penuh

(1)

Pengantar

Analisa Algoritma

(2)

Pendahuluan

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

(3)

Mengukur Efisiensi :

Perbandingan Empiris: Run ProgramAnalisis Algoritma (Asimptotis)

(4)

Kesulitan Perbandingan Empiris :

Diperlukan usaha pemrograman dan pengujian

yang lebih banyak

‘Penulisan’ program yang berbeda memungkinkan

menghasilkan kualitas program yang berbeda

Pemilihan kasus-kasus uji empiris mungkin tidak

(5)

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

(6)

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

(7)

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.

(8)

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

(9)

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<n; i++) // untuk setiap elemen array

if (A[i] > currlarge) // nilai terbesar saat ini berubah currlarge=A[i];

return currlarge; // return nilai terbesar }

(10)

Contoh 2

Misal cuplikan kode program sebagai berikut

Maka, T(n) = c2 n2

sum = 0;

for(i=1;i<=n;i++) for(j=1;j<=n;j++)

(11)

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 sekuensial

Best case: 1 Worst case: n

(12)

Best, Worst dan Average Cases

Best case

Umumnya kita tidak digunakan karena jarang terjadi dan

terlalu optimistik untuk karakteristik umum dari running-time suatu algoritma.

Worst case

Bisa 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

(13)

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?

(14)

Komputer Lebih Cepat vs Algoritma Lebih Cepat

10n 10n n' = T(n) n n' Perubahan n'/n 10n 1.000 10.000 n' = 10n 10 20n 500 5.000 n' = 10n 10 5n log n 250 1.842 < n' < 10n 7,37 2n2 70 223 3,16 2n 13 16 n' = n + 3

--n: ukuran input yang dapat diproses dalam satu detik pada komputer 1 n’: ukuran input yang dapat diproses dalam satu detik pada komputer 2

(15)
(16)

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.

(17)

Contoh-contoh

Contoh 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/2

Untuk semua nilai n > 1, |csn/2| ≤ cs |n|

Sehingga, dengan definisi, T(n) adalah anggota O(n) untuk n0 = 1 dan c = cs

(18)

Contoh-contoh:

Contoh 2.6 :

Diketahui T(n) = c1n2 + c

2n pada average case.

Dapatkan O(f(n)) |c1 n2 + c

2n| ≤ |c1n2 + c2n2 | ≤ (c1 + c2) | n2 |

untuk semua n > 1, sehingga, | T(n) | ≤ c |n2| untuk c = c

1 + c2 dan n0 = 1

Jadi, dengan definisi, T(n) adalah anggota dari O(n2).

Contoh 2.7 :

(19)

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.

(20)

Contoh

Diketahui T(n) = c1n2 + c2n pada average case.

Dapatkan Ω(g(n)) |c1n2 + c 2n| ≥ c1|n2| untuk semua n > 1 Sehingga, |T(n)| ≥ c|n2| untuk c=c 1 dan n0=1

Jadi, 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).

(21)

Big-Theta

Definisi :

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 + c

2n adalah angota O(n2) dan

(22)
(23)

Aturan Simplifikasi

Ketika kita menentukan persamaan running time

suatu algoritma, kita akan menentukan bentuk yang paling sederhana, sehingga diperlukan

aturan-aturan penyederhanaan untuk ketiga Oh, big-Omega dan big-Theta

(24)

Beberapa Aturan Penyederhanaan:

1) Jika f(n) adalah anggota O(g(n)) dan g(n) adalah anggota O(h(n)),

maka f(n) adalah anggota O(h(n)).

2) Jika f(n) adalah anggota O(kg(n)) untuk konstanta k > 0, maka

f(n) adalah anggota O(g(n)).

3) 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))).

4) 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.

(25)

25

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<=n; i++) sum += n;

(26)

26

Time Complexity Examples (2)

Contoh 3.11:

sum = 0;

for (j=1; j<=n; j++) for (i=1; i<=j; i++)

sum++;

for (k=0; k<n; k++) A[k] = k;

(27)

27

Time Complexity Examples (3)

Contoh 3.12:

sum1 = 0;

for (i=1; i<=n; i++) for (j=1; j<=n; j++)

sum1++; sum2 = 0;

for (i=1; i<=n; i++) for (j=1; j<=i; j++)

(28)

28

Time Complexity Examples (4)

Contoh 3.13: sum1 = 0; for (k=1; k<=n; k*=2) for (j=1; j<=n; j++) sum1++; sum2 = 0; for (k=1; k<=n; k*=2) for (j=1; j<=k; j++) sum2++;

(29)

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 kondisi

Rekursifitas: diselesaikan dengan relasi berulangSubrotine call: Kompleksitas dari subroutine yang

dipanggil

Referensi

Dokumen terkait

Maksud dari penelitian skripsi ini adalah untuk melakukan analisis performansi algoritma knapsack pada kasus pemilihan proyeke. Mengetahui performansi algoritma knapsack

Notasi Asimtotik dan Dasar Kelas Efisiensi Analisa Matematis Algoritma Nonrekrusif Analisa Matematis Algoritma Rekrusif Contoh Bilangan Fibonacci..

Tentukan apakah untuk ukuran input yang sama banyaknya eksekusi basic operation bisa berbeda.. Tentukan rumus sigma yang menunjukkan berapa kali basic

diperlukan  untuk  menjalankan  algoritma  sebagai  fungsi  dari  ukuran  masukan   n...  Validating  Digital  Evidence  for  Legal

Jenis kompresi ini digunakan untuk menyimpan database,spreadsheet, atau untuk memproses file teks.Diimplementasikan kompresi dengan algoritma LZW dan Run Length Encoding yang

Selain itu untuk memproses rekomendasi digunakan algoritma Binary Hamming Distance untuk matching process antara hasil input user dengan tempat makan yang tersedia

Algoritma ini tidak selalu memberikan jumlah warna minimum yang diperlukan untuk mewarnai G, namun algoritma ini cukup praktis untuk digunakan dalam pewarnaan