b log 2 n 1
2. Satuan pengukuran Running Time
Untuk mengukur waktu running algoritma
tidak digunakan satuan waktu (mis. detik,
milidetik, dsb), karena sangat bergantung
kepada kecepatan media komputasinya.
Dibutuhkan satuan pengukuran yang independen, tidak
tergantung kepada kecepatan media komputasi.
Salah satu caranya adalah dengan menghitung berapa kali
setiap operasi algoritma dilakukan sulit dan biasanya
tidak perlu.
Yang dapat dilakukan adalah menghitung banyaknya
operasi dasar, yaitu operasi yang paling banyak menyita
waktu running algoritma.
Operasi Dasar Algoritma
Operasi dasar algoritma biasanya berupa operasi yang
paling menyita waktu pada loop algoritma.
Misalnya, kebanyakan algoritma sorting bekerja dengan
membandingkan tiap key pada list yang akan diurutkan;
sehingga operasi dasarnya adalah perbandingan key.
Contoh lain: algoritma untuk perkalian matriks dan evaluasi
fungsi polinomial membutuhkan 2 operasi dasar aritmetika:
perkalian dan penjumlahan.
Perhitungan analisis algoritma dilakukan dengan menghitung
berapa kali operasi dasar algoritma dilakukan untuk
sejumlah input n.
Satuan pengukuran (lanjutan)
Misal cop adalah waktu eksekusi dari operasi dasar
sebuah algoritma pada komputer tertentu, dan C(n)
adalah berapa kali operasi dasar ini dilakukan.
Waktu running algoritma T(n) dapat dihitung
dengan: T (n) cop C (n)
Cop adalah suatu konstanta aproksimasi yang
menyatakan kecepatan eksekusi untuk 1 operasi
dasar.
Misal C (n) 12 n(n 1) , berapa lama lagi waktu yg
dibutuhkan oleh algoritma tersebut jika jumlah
inputnya dilipatduakan?
Satuan pengukuran (lanjutan)
Jawab: C (n) 1 n(n 1) 1 n 2 1 n 1 n 2
2 2 2 2
Sehingga:
1 2
( 2 n )
T (2n) cop C (2n) 2
4
T ( n) cop C (n) 1 2
n
2
Nilai sesungguhnya dari cop tidak diperlukan. Nilai ½, konstanta
pengali pada C(n), juga dihilangkan.
Karena alasan inilah maka analisis efisiensi algoritma
mengabaikan konstanta pengali dan hanya berfokus pada
derajat pertumbuhan (order of growth) untuk input yang berukuran
besar.
3. Derajat Pertumbuhan (Order of
Growth)
Untuk data berukuran besar, yang diperhatikan hanyalah derajat
pertumbuhan fungsinya saja. Perhatikan tabel perbandingan
beberapa fungsi dari derajat pertumbuhan algoritma berikut:
Tabel Perbandingan Fungsi Derajat Pertumbuhan Algoritma (Sumber: Tabel 2.1 A. Levitin, Introduction to
Design & Analysis Algorithm 3nd Edition, Pearson-Addision Weasley, 2011)
Contoh: Pada jumlah data n=102, jika jumlah operasi adalah 2100, pada
komputer yang dapat mengeksekusi 1 trilyun (1012) operasi per detik
dibutuhkan waktu 4 x 1010 tahun
Semakin tinggi derajat pertumbuhan fungsi, maka semakin lama
pula waktu running dari algoritma tersebut.
4. Efisiensi Worst-Case, Best-Case, dan
Average-Case
Ada beberapa algoritma yang waktu running-nya tidak
hanya bergantung kepada ukuran inputnya, tetapi juga
pada spesifikasi input tertentu.
Contoh: Algoritma Sequential Search, algoritma yang
mencari sebuah key k pada sekumpulan n elemen dengan
mengecek tiap elemen pada kumpulan tersebut (mulai dari
elemen pertama) sampai key ditemukan atau sampai pada
pengecekan elemen terakhir dan ternyata key yang dicari
tidak ditemukan.
Algoritma SequentialSearch
Berikut algoritmanya dengan menggunakan array:
Algorithm SequentialSearch(A[0..n-1], k)
//Input: Array[0..n-1] dan key yang dicari k
//Output: Indeks elemen pada A (jika key
//ditemukan) atau -1 jika tidak ditemukan
i 0
while i < n and A[i] ≠ k do
i i + 1
if i < n return i
else return -1
Kasus Terburuk (Worst-Case)
Walaupun ukuran list sama, tetapi waktu running algoritma dapat
berbeda untuk beberapa kombinasi elemen pada list.
Kasus terburuk terjadi jika key yang dicari ada pada elemen terakhir
atau key tidak ditemukan.
Hal ini akan menyebabkan terjadinya perbandingan key yang paling
banyak, yakni Cworst(n)=n.
Efisiensi kasus terburuk dari sebuah algoritma adalah efisiensi
algoritma tersebut pada input kasus terburuk berukuran n, yaitu saat
algoritma akan berjalan pada waktu paling lama dari waktu seluruh
kemungkinan input pada ukuran tersebut.
Analisis kasus terburuk menjamin bahwa untuk semua kombinasi input
dengan ukuran n yang sama, maka waktu running-nya tidak akan
melebihi Cworst(n), yaitu waktu running untuk input kasus terburuk.
Kasus Terbaik (Best-Case)
Pada algoritma SequentialSearch, kasus terbaik
terjadi ketika key yang dicari ada pada elemen
pertama pada list, sehingga Cbest(n)=1.
Analisis kasus terbaik tidak banyak dilakukan,
karena tidak terlalu signifikan
Untuk algoritma pengurutan, kasus terbaik terjadi
ketika elemen pada list sudah terurut.
Kasus Rata-rata (Average Case)