Anda di halaman 1dari 29

Pengantar

Analisa Algoritma

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 ?

Mengukur Efisiensi :
Perbandingan Empiris: Run Program

Analisis Algoritma (Asimptotis)

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

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


static int largest(int[ ] A, int n) {
int currlarge = 0;
for (int i=0; i<n; i++)
if (A[i] > currlarge)
currlarge=A[i];
return currlarge;
}

// Dapatkan nilai terbesar


// inisialisasi nilai terbesar saat ini
// untuk setiap elemen array
// nilai terbesar saat ini berubah
// return nilai terbesar

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

Contoh 2
Misal cuplikan kode program sebagai berikut
sum = 0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
sum++ ;

Maka, T(n) = c2 n2

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
Average case: n/2

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 realtime (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 Cepat

n: ukuran input yang dapat diproses dalam satu detik pada komputer 1
n: ukuran input yang dapat diproses dalam satu detik pada komputer 2
T(n)

n'

Perubahan

n'/n

10n

1.000

10.000

n' = 10n

10

n' = 10n

10

10n

20n

500

5.000

5n log n

250

1.842

2n2

70

223

2n

13

16

10n < n' < 10n

n' =

n' = n + 3

7,37
3,16

--

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

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 = 1
Jadi, 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.

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

Dapatkan (g(n))
|c1n2 + c2n| c1|n2| untuk semua n > 1
Sehingga,
|T(n)| c|n2| untuk c=c1 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).

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 + 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 aturanaturan penyederhanaan untuk ketiga big-Oh, bigOmega dan big-Theta

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.

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;

25

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;

26

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++)
sum2++;

27

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

28

Statement Control yang lain?


Perhitungan running time dapat dinyatakan secara
garis besar sebagai berikut :
Untuk loop while, perhitungannya sama dengan loop for
Statemen if lebih besar daripada then/else, mungkin

melibatkan probabilitas karena adanya penyeleksian


kondisi
Rekursifitas: diselesaikan dengan relasi berulang
Subrotine call: Kompleksitas dari subroutine yang
dipanggil

Slide berikutnya

Anda mungkin juga menyukai