KOMPLEKSITAS ALGORITMA DAN PEMROGRAMAN (Pertemuan 13-14) - Diponegoro University | Institutional Repository (UNDIP-IR)

PROGRAM STUDI

S1 SISTEM KOMPUTER
UNIVERSITAS DIPONEGORO

Oky Dwi Nurhayati, ST, MT
email: [email protected]

Kinerja yang perlu ditelaah pada algoritma:
 beban komputasi
 efisiensi penggunaan memori
Yang perlu diperhatikan:
 Kasus rata-rata : running time untuk tipikal data tertentu.
 Kasus terjelek : running time yang mungkin paling jelek pada
konfigurasi masukan data tertentu.
 Program  bahasa yang dipakai
 Program sensitif terhadap input
 Program sulit dimengerti, dan secara matematis hasil tak
tersedia/diketahui
 Sering program tak bisa dibandingkan


 Sebuah algoritma tidak saja harus benar, tetapi juga harus








mangkus (efisien).
Algoritma yang bagus adalah algoritma yang mangkus.
Kemangkusan algoritma diukur dari berapa jumlah
waktu dan ruang (space) memori yang dibutuhkan untuk
menjalankannya.
Algoritma yang mangkus ialah algoritma yang
meminimumkan kebutuhan waktu dan ruang.
Kebutuhan waktu dan ruang suatu algoritma bergantung
pada ukuran masukan (n), yang menyatakan jumlah data
yang diproses.
Kemangkusan algoritma dapat digunakan untuk menilai

algoritma yang terbaik.

Bentuk rekursif :
a. suatu subrutin/fungsi/ prosedur yang memanggil
dirinya sendiri.
b. Bentuk dimana pemanggilan subrutin terdapat dalam
body subrutin
c. Dengan rekursi, program akan lebih mudah dilihat

Bentuk rekursi bertujuan untuk :
b. menyederhanakan penulisan program
c. menggantikan bentuk iterasi
Syarat bentuk rekursif:
 ada kondisi terminal (basis)
 ada subroutine call yang melibatkan parameter yang
nilainya menuju kondisi terminal (recurrence)

Untuk bentuk rekursif, digunakan teknik perhitungan
kompleksitas dengan relasi rekurens


Function Faktorial (input n : integer) → integer
{menghasilkan nilai n!, n tidak negatif}
Algoritma
 If n=0 then
Return 1
 Else
Return ( n*faktorial (n-1) )
 Endif

 Kompleksitas waktu :
b. untuk kasus basis, tidak ada operasi perkalian → (0)
c. untuk kasus rekurens, kompleksitas waktu diukur

dari jumlah perkalian (1) ditambah kompleksitas
waktu untuk faktorial (n-1)

Jadi relasi rekurens :

Relasi Rekurrens :


Persoalan Minimum & Maksimum
procedure MinMaks2(input A : TabelInt, i, j : integer,
output min, maks : integer)
{ Mencari nilai maksimum dan minimum di dalam tabel A
yang berukuran n elemen secara Divide and Conquer.
Masukan: tabel A yang sudah terdefinisi elemenelemennya
Keluaran: nilai maksimum dan nilai minimum tabel}
Deklarasi
min1, min2, maks1, maks2 : integer

Persoalan Minimum
&Maksimum
if i=j then { 1 elemen }
min←Ai
maks←Ai
else
if (i = j-1) then { 2 elemen }
if Ai < Aj then
maks←Aj
min←Ai

else
maks←Ai
min←Aj
endif

Persoalan Minimum
&Maksimum
else { lebih dari 2 elemen }
k←(i+j) div 2 { bagidua tabel pada posisi k }
MinMaks2(A, i, k, min1, maks1)
MinMaks2(A, k+1, j, min2, maks2)
if min1 < min2 then
min←min1
else
min←min2
endif
if maks1 1

Penyelesaian:
T(n) = 2T(n/2) + cn

= 2(2T(n/4) + cn/2) + cn = 4T(n/4) + 2cn
= 4(2T(n/8) + cn/4) + 2cn = 8T(n/8) + 3cn
= ...
= 2k T(n/2k) +kcn
Berhenti jika ukuran tabel terkecil, n = 1:
n/2k = 1 → k = 2log n
sehingga
T(n) = nT(1) + cn 2log n
= na + cn 2log n
= O(n 2log n)