DESAIN and ANALISIS ALGORITMA ALGORITM

DESAIN & ANALISIS
ALGORITMA
3/24/2009

PERTEMUAN 5 : ALGORITMA NON-REKURSIF (1)

Analisis Algoritma Non-rekursif:
1. Algoritma MaxElement
2



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
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.
Operasi dasar yang paling banyak dieksekusi ada dalam loop for.

Algoritma MaxElement (lanjutan)
3







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
perbandingan dijadikan sebagai operasi dasar.
Jumlah perbandingan pun tetap sama untuk semua
variasi input array berukuran n, sehingga tidak
perlu menghitung worst case, best case, dan
average case.

Algoritma MaxElement (lanjutan)
4



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:


C (n)   1
n 1
i 1

C ( n )  n  1  ( n)

Langkah Analisis Algoritma Nonrekursif
5








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
worst case, average case, dan best case.
Tentukan sebuah persamaan jumlah dari eksekusi operasi
dasar algoritma.
Dengan menggunakan rumus standar dan aturan manipulasi
penjumlahan, tentukan rumus penjumlahannya atau
setidaknya tentukan derajat pertumbuhannya.

2. Algoritma Pengecekan Keunikan
Element
6





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])
//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
return true

Algoritma Pengecekan Keunikan
Element (lanjutan)
7









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 casenya 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)
Input yang memiliki elemen yang sama pada 2 posisi terakhir

Algoritma Pengecekan Keunikan
Element (lanjutan)
8




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 Cworst(n):
C worst (n)  

1   (n  1)  (i  1)  1   (n  1  i)

n  2 n 1

n2

n2

i  0 j i 1

i 0

i 0


C worst (n)   (n  1)   i  (n  1)1 
n2
i 0

n2

n2

i 0

i 0

(n  2)(n  1)
2
n(n  1) 1 2
 n  ( n 2 )
C worst (n) 
2
2

C worst (n)  (n  1) 2 

(n  2)(n  1)
2

Algoritma Pengecekan Keunikan
Element (lanjutan)
9



Nilai  (n  1  i) juga dapat dihitung lebih cepat
dengan cara sebagai berikut:
n2
i 0

 (n  1  i)  (n  1)  (n  2)  (n  3)  ...  1 
n2
i 0




n(n  1)
2

Dapat disimpulkan bahwa dalam worst case,
algoritma ini akan membandingkan n(n-1)/2
elemen-elemen dalam sebuah array berukuran n.

3. Algoritma Pencarian Digit Biner dari
Bilangan Desimal
10



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  n / 2 
return count

Algoritma Pencarian Digit Biner dari
Bilangan Desimal (lanjutan)
11







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
log 2 n  1

Latihan
12

Hitunglah deret berikut:

1.

a)
b)

1 + 3 + 5 + 7 + … + 999
n 1
F1
i 3

i
F
i 3
n
1
1

c)

F ij
n

d)

n

i 1 j 1

Latihan (lanjutan)
13

Carilah derajat pertumbuhan dari deret berikut:

2.

a)

F (i

n 1

2

i 0

 1) 2


F (i  j )
n 1 i 1

b)

i  0 j 0

2
lg
i

F
n 1

c)

i2

Latihan (lanjutan)
14
3.

ALGORITHM Mystery(n)
//Input: Integer non-negatif n
S  0

for i  1 to n do
S  S + i * i

return S

a. Apa yang dihitung oleh algoritma ini?
b. Apa operasi dasarnya dan berapa kali operasi dasar
tersebut dilakukan?
c. Termasuk class efisiensi manakah algoritma ini?