Anda di halaman 1dari 19

1

DESAIN & ANALISIS


ALGORITMA
2/26/2020 PERTEMUAN 3
Kerangka Analisis Algoritma:
1. Pengukuran Input
 Hampir semua algoritma akan berjalan lebih lambat jika
ukuran inputnya membesar.
 Pengukuran efisiensi algoritma dilakukan dengan
menghitung fungsi dengan parameter n dimana n adalah
ukuran input datanya.
 Dalam sebagian besar kasus, n dapat diketahui dengan
mudah, misalnya ukuran list untuk permasalahan sorting,
searching, pencarian elemen terkecil pada list, dsb.
 Untuk permasalahan evaluasi polinomial
p(x)=anxn + an-1xn-1 + …+ a0 berderajat n, maka n adalah
derajat tertinggi dari polinomial tersebut.
Pengukuran Input
 Bagaimana menghitung ukuran input untuk algoritma yang
mengecek ejaan? (spell checking algorithm)
 Jika algoritma bekerja dengan mengecek tiap2 karakter,
maka ukuran input adalah jumlah seluruh karakter. Jika
algoritma bekerja dengan mengecek per kata, maka
ukuran input adalah jumlah seluruh kata.
 Untuk algoritma yang berhubungan dengan sifat2 bilangan
(misal mengecek apakah sebuah bilangan merupakan bil
prima atau bukan), maka ukuran inputnya adalah jumlah bit
(b) dari nilai biner bilangan tersebut:

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)

 Pada keadaan normal, yang banyak terjadi adalah


kasus rata-rata.
 Average Case ≠ (Worst Case + Best Case)/2
 Untuk menghitung kasus rata-rata digunakan
konsep probabilitas.
 Untuk SequentialSearch ada 2 asumsi:
 Probabilitas pencarian yg sukses (key ditemukan) = p
(0 ≤ p ≤ 1). Jika sukses: p=1, else p=0.
 Probabilitas key ditemukan pada posisi ke-i adalah
sama untuk semua nilai i.
Kasus Rata-rata (lanjutan)
 Jumlah perbandingan key pada kasus rata-rata
adalah Cavg(n).
 Pada kasus pencarian yg sukses, probabilitas
kemunculan elemen yg dicari pada posisi ke-i
adalah p/n untuk setiap i, dan jumlah
perbandingan yg dilakukan adalah i.
 Pada kasus pencarian yg tidak sukses, jumlah
perbandingannya adalah n, dengan probabilitas
kemungkinannya adalah (1-p).
Kasus Rata-rata (lanjutan)
 Jumlah perbandingan key = jumlah perbandingan
pada kasus yg sukses + jumlah perbandingan pada
kasus yg tidak sukses
 p p p p
Cavg (n)  1  2   ...  i   ...  n    n  (1  p)
 n n n n

Cavg (n)  1  2  ...  i  ...  n  n(1  p)


p
n
p n(n  1)
Cavg (n)   n(1  p )
n 2
p(n  1)
Cavg (n)   n(1  p)
2
Kasus Rata-rata (lanjutan)
 Jika p=1 (pencarian harus sukses), maka jumlah
rata-rata perbandingan key pada
SequentialSearch adalah (n+1)/2; artinya
algoritma akan mengecek setengah dari ukuran list.
 Jika p=0 (pencarian harus tidak sukses), maka
jumlah rata-rata perbandingan key adalah n
karena algoritma akan mengecek seluruh n elemen
pada list.
Kesimpulan
 Efisiensi waktu & ruang diukur dengan fungsi algoritma yang
berdasarkan ukuran input.
 Efisiensi waktu diukur dengan menghitung berapa kali operasi dasar
algoritma dieksekusi.
 Efisiensi ruang diukur dengan menghitung jumlah unit memori tambahan
yang digunakan oleh algoritma.
 Efisiensi beberapa algoritma dapat berbeda untuk input yang
berukuran sama. Untuk itu perlu dibedakan antara efisiensi kasus
terburuk, kasus terbaik, dan kasus rata-rata.
 Kerangka utama analisis algoritma terletak pada derajat pertumbuhan
dari waktu running algoritma (atau unit memori tambahan yg
digunakan) seiring dengan bertambahnya ukuran input.
Latihan (1/2)
1. Untuk tiap algoritma berikut, tentukan: (i) ukuran inputnya; (ii)
operasi dasarnya; (iii) apakah jumlah operasi dasarnya dapat
berbeda untuk input yang berukuran sama:
a. Penghitungan jumlah dari n bilangan
b. Penghitungan n!
c. Pencarian elemen terbesar pada sekumpulan n bilangan
2. Suatu ketika kita hendak membuat algoritma untuk membantu kita
mencari lagu melalui Google. Tentukan:
• Apa operasi dasar algoritma tersebut
• Berapa ukuran inputnya, dan bagaimana menentukan ukuran
itu
• Bagaimana kecepatan algoritma tersebut berdasarkan
derajat pertumbuhan fungsinya
Latihan (2/2)
3. Ada 22 sarung tangan di sebuah laci: 5 pasang berwarna merah,
4 pasang berwarna kuning, dan 2 pasang berwarna hijau. Kita
akan mengambil sarung tangan dalam gelap dan mengeceknya
setelah pengambilan dilakukan. Berapa jumlah sarung tangan
yang harus diambil untuk menjamin bahwa kita telah mengambil
sepasang dengan warna yang sama? Dalam best case dan worst
case?
4. Carilah masing-masing dua algoritma yang memiliki kecepatan:
• log n
• n
• n log n

Anda mungkin juga menyukai