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)
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)