Anda di halaman 1dari 44

Dasar Analisis Algoritma

Mira Suryani, S.Pd., M.Kom


S-1 Teknik Informatika
Karena kebodohan kita membuat kesalahan,
Dan dari kesahalan kita belajar
(Anonim dalam Rinaldi Munir, 2010)
Pembahasan Materi
1. Computational Tractability
2. Asymptotic Order of Growth
3. A Survey of Common Running Times
Tujuan Pembelajaran
Setelah mempelajari materi ini diharapkan Anda dapat memahami dan
menentukan efisiensi dari sebuah algoritma yang dinyatakan dalam
ukuran kompleksitas waktu asimptotik baik Big-O, Big-Ω, dan Big-Θ
1. Computational Tractability
• Menganalisis algoritma melibatkan pemikiran tentang bagaimana
kebutuhan sumber daya (jumlah waktu dan ruang yang mereka
gunakan) terhadap skala peningkatan ukuran input.
(i)Ukuran input data untuk suatu algoritma, . Contoh algoritma
pengurutan elemen-elemen larik, adalah jumlah elemen larik.
(ii) Kompleksitas waktu, ( ), adalah jumlah operasi yang dilakukan
untuk melaksanakan algoritma sebagai fungsi dari input .
(iii) Kompleksitas ruang, ( ) , adalah ruang memori yang
dibutuhkan algoritma sebagai fungsi dari input .
1. Computational Tractability
• Kita fokus pada efficiency on running time: kami ingin algoritma yang
berjalan cepat. Tetapi penting bahwa algoritma juga efisien dalam
penggunaan memori.
• Masalah komputasi dikatakan dapat ditelusuri –mudah dari segi
komputasi- (tractable) jika ada algoritma yang efisien untuk itu.
Kompleksitas Waktu ( )
• Kompleksitas waktu sebuah algoritma dapat dihitung dengan langkah-
langkah sebagai berikut:
(1) Menetapkan ukuran input
(2) Menghitung banyaknya operasi yang dilakukan oleh algoritma.
Dalam sebuah algoritma terdapat banyak jenis operasi seperti
operasi penjumlahan, pengurangan, perbandingan, pembagian,
pembacaan, pemanggilan prosedur, dsb.
Contoh Kasus
procedure HitungRerata (input x1, x2, …, xn: integer, output r: real)
{ Menghitung nilai rata-rata dari sekumpulan elemen larik integer x1, x2, … xn.
Nilai rata-rata akan disimpan di dalam variable r.
Input: x1, x2, … xn
Output: r (nilai rata-rata)
}
Deklarasi
i : integer
jumlah : real

Algoritma
Jumlah  0
i1
while i ≤ n do
jumlah  jumlah + ai
ii+1
endwhile
{i > n}
r  jumlah/n {nilai rata-rata}
Cara Perhitungan ( )
• Jenis-jenis operasi yang terdapat di dalam Algoritma HitungRerata adalah:
(1) Operasi pengisian nilai/assignment (dengan operator “”)
(2) Operasi penjumlahan (dengan operator “+”)
(3) Operasi pembagian (dengan operator “/”)

• Cara menghitung kompleksitas waktu dari algoritma tersebut adalah dengan


cara menghitung masing-masing jumlah operasi. Jika operasi tersebut berada
di sebuah loop, maka jumlah operasinya bergantung berapa kali loop
tersebut diulangi.
• Operasi pengisian nilai (assignment)
jumlah  0, 1 kali
k  1, 1 kali
jumlah jumlah + ak n kali
k  k+1, n kali
r  jumlah/n, 1 kali
Jumlah seluruh operasi pengisian nilai (assignment) adalah =1+1+ + +1=3+2

• Operasi penjumlahan
Jumlah + ak, n kali
k+1, n kali
Jumlah seluruh operasi penjumlahan adalah = + =2

• Operasi pembagian
Jumlah seluruh operasi pembagian adalah
Jumlah/n 1 kali

• Dengan demikian, kompleksitas waktu algoritma dihitung berdasarkan jumlah operasi aritmatika
dan operasi pengisian nilai adalah:
= + + =3+2 +2 +1=4 +4
Macam-macam Kompleksitas Waktu (1)
• Hal lain yang harus diperhatikan dalam menghitung kompleksitas waktu suatu
algoritma adalah parameter yang mencirikan ukuran input. Contoh pada algoritma
pencarian, waktu yang dibutuhkan untuk melakukan pencarian tidak hanya
bergantung pada ukuran larik ( ) saja, tetapi juga bergantung pada nilai elemen ( )
yang dicari.
• Misalkan:
(i) Terdapat sebuah larik dengan panjang elemen 130 dimulai dari , , …
(ii) Asumsikan elemen-elemen larik sudah terurut. Jika = , maka waktu
pencariannya lebih cepat 130 kali dari pada = atau tidak ada di dalam
larik.
(iii) Demikian pula, jika = , maka waktu pencariannya ½ kali lebih cepat
daripada =
Macam-macam Kompleksitas Waktu (2)
• ( ) : kompleksitas waktu untuk kasus terbaik (best case)
merupakan kebutuhan waktu minimum yang diperlukan algoritma
sebagai fungsi dari .

• ( ) : kompleksitas waktu untuk kasus rata-rata (average case)


merupakan kebutuhan waktu rata-rata yang diperlukan algoritma
sebagai fungsi dari . Biasanya pada kasus ini dibuat asumsi bahwa
semua barisan input bersifat sama. Contoh pada kasus searching
diandaikan data yang dicari mempunyai peluang yang sama untuk
tertarik dari larik.

• ( ) : kompleksitas waktu untuk kasus terburuk (worst case)


merupakan kebutuhan waktu maksimum yang diperlukan algoritma
sebagai fungsi dari .
Contoh Kasus: Sequential Search
procedure SequentialSearch(input , , … : integer, y : integer, output idx : integer)
{ Mencari di dalam elemen , , … . Lokasi (indeks elemen) tempat ditemukan diisi ke dalam idx. Jika tidak ditemukan, makai idx
diisi dengan 0.
Input: , , …
Output: idx}
Deklarasi
i : integer
found : boolean {bernilai true jika y ditemukan atau false jika y tidak ditemukan}
Algoritma
i1
found  false
while (i ≤ n) and (not found) do
if xi = y then
found  true
else
ii+1
endif
endwhile
{i < n or found}

If found then {y ditemukan}


idx  i
else
idx  0 {y tidak ditemukan}
endif
Menentukan Best, Average, Worst – Case ( )

• Hitung jumlah operasi perbandingan elemen larik yang terjadi selama


pencarian ( = )
• Operasi perbandingan yang lain seperti 1 ≤ tidak akan dihitung

1. Best Case: terjadi bila ( = )


Operasi perbandingan ( = ) hanya dilakukan 1 kali, maka
( )=1
Menentukan Best, Average, Worst – Case ( ) (2)
2. Worst Case: bila ( = ) atau tidak ditemukan
Seluruh elemen larik dibandingkan, maka jumlah perbandingannya:

3. Average Case: asumsikan peluang y terdapat disembarang lokasi adalah sama,


peluang elemen ke− = adalah 1/ atau = = 1/ . Jika = maka
yang dibutuhkan adalah = , maka jumlah perbandingan elemen lariknya:

( )
=∑ [ ]= =∑ = ∑ = ∑ = =
Biasanya kita berkonsentrasi untuk
menemukan worst-case running time.
Mengapa?
Alasan perhitungan worst-case
• Worst-case running time merupakan upper bound (batas atas) dari
running time untuk input apapun. Hal ini memberikan jaminan bahwa
algoritma yang kita jalankan tidak akan lebih lama lagi dari worst-case
• Untuk beberapa algoritma, worst-case cukup sering terjadi. Dalam
beberapa aplikasi pencarian, pencarian info yang tidak ada mungkin
sering dilakukan.
• Pada kasus average-case umumnya lebih sering seperti worst-case.
Contoh: misalkan kita secara random memilih angka dan
mengimplementasikan insertion sort, average-case = worst-case yaitu
fungsi kuadratic dari .
Seringkali kita tidak tertarik dengan kompleksitas waktu yang presisi
untuk suatu algoritma, kita lebih tertarik pada bagaimana best-case dan
worst-case tumbuh bersamaan dengan meningkatnya ukuran input
Perhatikan Terciptanya Big-O Notation
= 2 +6 +1
Untuk yang besar, pertumbuhan ( ) sebanding dengan

Suku 6 + 1 tidak berarti jika dibandingkan dengan 2 , dan boleh diabaikan


sehingga T(n) = 2 + suku-suku lainnya. Koefisien 2 pada 2 boleh diabaikan,
sehingga T(n) = O( )  Kompleksitas Waktu Asimptotik
2. Asymptotic Order of Growth
Big-O Notation
Definisi 1. = ( ) artinya ( ) berorde paling besar ( ) bila
terdapat konstanta C dan sedemikian sehingga

≤ . ( )
Untuk ≥

Jika dibuat semakin besar, waktu yang dibutuhkan tidak akan melebihi
konstanta dikalikan dengan ( ),  ( ) adalah upper bound
Ilustrasi Big-O Notation
Contoh:
= +5 ,

Pada awalnya kurva berada di atas Cf n = 2


(pembanding), tetapi untuk ≥ 5,
+5 ≤ 2

Karena itu, kita mengambil C= 2, dan = 5, untuk


memperlihatkan bahwa:
+5 = ( )
Contoh Soal 1
Tunjukan bahwa, =2 +6 +1=
Penyelesaian:
Kita mengamati bahwa jika ≥ 1 sehingga

2 +6 +1≤ ( ), ≥1

Maka kita bisa mengambil C=9 dan =1 untuk memperlihatkan

=2 +6 +1=
Contoh Soal 2
Tunjukkan bahwa: = 5 = (1)

Penyelesaian:
≤ . ( )

5 = (1) karena 5 ≤ 5.1, untuk ≥ 1  C=5, atau


5 = (1) karena 5 ≤ 6.1, untuk ≥ 1 C=6, atau
5 = (1) karena 5 ≤ 10.1, untuk ≥ 1 C=10
Contoh Soal 3
Tunjukkan bahwa =3 +2= ( )

Penyelesaian:
3 + 2 = ( ) karena 3 + 2 ≤ C , untuk semua ≥1
C=5, =1
Contoh-contoh menentukan kompleksitas
waktu asimptotik
Big-O Notation dari Polinomial Berderajat m
• Polinomial berderajat dapat digunakan untuk memperkirakan
kompleksitas waktu asimptotik dengan mengabaikan suku berorde
rendah

Contoh: =3 +6 + +8= ( ), dinyatakan pada

TEOREMA 1
Bila = + + + adalah polinom berderajat
m maka = ( )
Big-O dari Polinomial Berderajat m (2)
Bukti Teorema 1:
Teorema Big-O Notation
TEOREMA 2
Misalkan = = ,
(a)(i) + = (max( , )
(ii) + = +
(b) . = ) ( = .
(c) = , ℎ
(d) =
Contoh Soal 1
Misalkan, = = , dan = ( ),
dengan m sebagai peubah, maka

(a) + = (max( , = ( ) Teorema 2(a)(i)


(b) + = + Teorema 2(a)(ii)
(c) . = . = Teorema 2(b)
Contoh Soal 2
• 5 = Teorema 2(c)
• = Teorema 2(d)
Aturan Menentukan Kompleksitas Waktu Asimptotik
• Cara I
Jika kompleksitas waktu T(n) dari algoritma sudah dihitung, maka
kompleksitas waktu asimptotiknya dapat langsung ditentukan dengan
mengambil suku yang mendominasi fungsi T dan menghilangkan
koefisiennya (sesuai TEOREMA 2)

Contoh:
Pada algoritma cariMax, ( ) = −1= ( )
Aturan Menentukan Kompleksitas Waktu Asimptotik

• Cara II
Kita bisa langsung menggunakan notasi Big-O, dengan cara:
Pengisian nilai (assignment), perbandingan, operasi aritmatika (+,-,/,*,
div, mod), read, write, pengaksesan elemen larik, memilih field
tertentu dari sebuah record, dan pemanggilan function/void
membutuhkan waktu O(1)
Contoh:
Tinjau potongan algoritma berikut:
read(x) O(1)
xx+1 O(1) + O(1)=O(1)
write(x) O(1)
Kompleksitas waktu asimptotik algoritmanya (1) + (1) + (1) = (1)
Penjelasan:
(1) + (1) + (1) = (max(1,1)) + (1) Teorema 2(a)(i)
= (1) + (1)
= (max(1,1)) Teorema 2(a)(ii)
= (1)
3. A Survey of Common Running Times
• Pengelompokkan berdasarkan Big-O Notation

• Kelompok algoritma berdasarkan kompleksitas asimptotiknya


Penjelasan masing-masing kelompok
Nilai masing-masing fungsi untuk bermacam-macam nilai n
Laju Pertumbuhan Kompleksitas Waktu
Big-Ω Notation dan Big-θ Notation
Notasi Big-O hanya menyediakan batas atas (upper bound) untuk
perhitungan kompleksitas waktu asimptotik, tetapi tidak menyediakan
batas bawah (lower bound). Untuk itu, lower bound dapat ditentukan
dengan Big-Ω Notation dan Big-θ Notation.

Definisi Big-Ω Notation:


= Ω(g(n)) yang artinya berorde paling kecil ( ) bila
terdapat konstanta C dan sedemikian sehingga
≥ C.(g(n))
untuk ≥
Big-Ω dan Big-θ Notation (2)
Definisi Big-θ Notation:
= θ(ℎ( )) yang artinya berorde sama dengan ℎ( ) jika
= O(ℎ( )) dan ( ) = Ω ( ( ))

Contoh:
Tentukan Big-Ω dan Big-θ Notation untuk =2 +6 +1

Penyelesaian:
Karena 2 + 6 + 1 ≥ 2 untuk ≥ 1, dengan mengambil C=2, kita memperoleh
2 +6 +1=
Karena 2 +6 +1= dan 2 + 6 + 1 = , maka 2 + 6 + 1= θ( )
Sesi Materi Berakhir
TERIMA KASIH

Anda mungkin juga menyukai