DESAIN & ANALISIS
ALGORITMA
PERTEMUAN 5 : ALGORITMA NON-REKURSIF (1)
2 2
Analisis Algoritma Non-rekursif:
1. Algoritma MaxElement
Berikut adalah algoritma untuk mencari elemen terbesar dari
sekumpulan n bilangan:
ALGORITHM MaxElement (A[0..n-1])
//Input: Array A[0..n-1] dari bilangan real
//Output: Nilai dari elemen terbesar pada array A //Output: Nilai dari elemen terbesar pada array A max A[0]
for i 1 to n-1 do
if A[i] > max
max A[i]
return max
Ukuran input dari algoritma ini adalah jumlah elemen pada array,
yaitu n.
3
Algoritma MaxElement (lanjutan)
Ada 2 operasi dalam loop: perbandingan A[i] >
max dan assignment max A[i].
Karena operasi perbandingan dieksekusi pada tiap
iterasi (dan operasi assignment tidak), maka
3
iterasi (dan operasi assignment tidak), maka
perbandingan dijadikan sebagai operasi dasar.
Jumlah perbandingan pun tetap sama untuk semua
variasi input array berukuran n, sehingga tidak
4
Algoritma MaxElement (lanjutan)
Misal C(n) adalah jumlah eksekusi operasi
perbandingan. Dalam tiap loop, terjadi 1 kali perbandingan. Ini dieksekusi sebanyak (n-1) kali. Sehingga, C(n) berjumlah:
)
(
1
)
(
1
)
(
1
1
n
n
n
C
n
C
n
i
5
Langkah Analisis Algoritma
Non-rekursif
Tentukan parameter yang mengindikasikan ukuran input
Tentukan operasi dasar algoritma (Petunjuk: biasanya ada
dalam loop terdalam)
Periksa apakah jumlah eksekusi operasi dasar hanya
bergantung pada ukuran input. Jika tidak (artinya juga
bergantung pada faktor lain), maka perlu dilakukan analisis bergantung pada faktor lain), maka perlu dilakukan analisis worst case, average case, dan best case.
Tentukan sebuah persamaan jumlah dari eksekusi operasi
dasar algoritma.
Dengan menggunakan rumus standar dan aturan manipulasi
6
2. Algoritma Pengecekan Keunikan
Element
Algoritma ini mengecek apakah semua elemen
pada sebuah array adalah distinct (berbeda
antara elemen yang satu dengan yang lain). Berikut algoritmanya:
ALGORITHM UniqueElement(A[0..n-1])
ALGORITHM UniqueElement(A[0..n-1])
//Input: Array A[0..n-1]
//Output: “true” jika semua elemen pada A adalah //unik/distinct atau “false” jika sebaliknya
for i 0 to n-2 do
for j i+1 to n-1 do
if A[i] = A[j] return false
7
Algoritma Pengecekan Keunikan
Element (lanjutan)
Ukuran input: jumlah elemen pada array, yaitu n.
Karena loop terdalam hanya memiliki satu operasi (yaitu
perbandingan 2 elemen), maka itu adalah operasi dasar algoritma.
Algoritma ini memiliki worst case dan best case. Worst
case- Algoritma ini memiliki worst case dan best case. Worst
case-nya adalah ketika terjadi jumlah perbandingan yang paling banyak di antara berbagai kombinasi input berukuran n.
Ada 2 jenis input worst case:
Input yang tidak memiliki elemen yang sama (artinya semua elemen unik)
8
Algoritma Pengecekan Keunikan
Element (lanjutan)
Pada kasus worst case, operasi dasar akan
dieksekusi sebanyak looping j (mulai i+1 s.d. n-1), sedangkan looping j sendiri dieksekusi sebanyak
looping i (mulai 0 s.d. n-2), sehingga Cworstworst(n):
9
Algoritma Pengecekan Keunikan
Element (lanjutan)
Nilai juga dapat dihitung lebih cepat
dengan cara sebagai berikut:
2
Dapat disimpulkan bahwa dalam worst case,
algoritma ini akan membandingkan n(n-1)/2
10
3. Algoritma Pencarian Digit Biner dari
Bilangan Desimal
Algoritma berikut mencari jumlah digit biner dari
bilangan integer desimal positif:
ALGORITHM Binary(n)
//Input: Integer desimal positif n
//Output: Jumlah digit biner dari bilangan n
count 1
while n > 1 do
count count + 1 n
11
Algoritma Pencarian Digit Biner dari
Bilangan Desimal (lanjutan)
Operasi yang paling banyak dieksekusi bukan
terletak di dalam loop while, tetapi pada
perbandingan n > 1, yang menentukan apakah isi loop akan dieksekusi atau tidak.
Karena nilai n berkurang sekitar separuhnya pada
tiap iterasi, maka jumlah eksekusi operasi dasar
adalah sekitar log2 n.
Rumus tepatnya untuk jumlah perbandingan tersebut
adalah
12
Latihan
1. Hitunglah deret berikut:
a) 1 + 3 + 5 + 7 + … + 999
b) F
1
3
1 n
i
1
n
c) F
d) F
1 3n
i
i
n i
n
j
ij
13
Latihan (lanjutan)
2. Carilah derajat pertumbuhan dari deret berikut:
a) F
b) F
1
0
2 2
) 1 (
n
i
i
1 1 ( ) n i
j i
b) F
c) F
i0 j0
1 2
2
lg
n
i
14
Latihan (lanjutan)
3. ALGORITHM Mystery(n)
//Input: Integer non-negatif n
S 0
for i 1 to n do S S + i * i
return S return S
a. Apa yang dihitung oleh algoritma ini?
b. Apa operasi dasarnya dan berapa kali operasi dasar tersebut dilakukan?