Analysis of Algorithm KULIAH #2
Analysing Control Structure SEQUENCING, misal P1 dan P2 : dua bagian algoritma (bisa single instruction atau complicated subalgorithms). Misal t1 dan t2 masing-masing waktu yang diperlukan oleh P1 dan P2. SEQUENCING RULE : waktu yang diperlukan untuk compute “P1; P2” (P1 kemudian P2) adalah t1+t2. Dengan “maximum rule”, waktunya dalam Θ(max(t1,t2)). Kemungkinan : parameter yang mengendalikan t2 tergantung pada hasil computation yang dilakukan oleh P1. Sehingga, analysis “P1; P2” tidak selalu bisa dilakukan dengan menganggap P1 dan P2 secara independent.
Analysing Control Structure (1) “FOR” LOOP, perhatikan loop for i 1 to m do P(i) (convention : untuk m=0 tidak “error”, hanya statemen terkontrol P(i) sama sekali tidak dieksekusi). Misal size instance n, P(i) tidak benar-benar tergantung pada i, t waktu untuk compute P(i). Maka total waktu yang diperlukan loop adalah l=mt. (kemungkinan ada “pitfall”, karena tidak memperhitungkan waktu yang diperlukan untuk “loop control”.)
Analysing Control Structure (2) “for loop”, merupakan “shorthand” untuk i 1 while i m do P(i) i i+1 Misal c : upper bound on the time requeired by each operation, maka l (t+3c)m + 2c = mt +3cm + 2c. Jika c bisa diabaikan dibanding t, maka secara kasar l =mt (kecuali jika m=0).
Analysing Control Structure (3) Analysis “for loop”. Jika t(i) yang diperlukan oleh P(i) berubah sebagai fungsi i. (umumnya, waktu yang diperlukan oleh P(i) bisa tergantung tidak hanya pada i, juga instance size n atau bahkan instance itu sendiri). Jika waktu untuk “loop control” diabaikan, selama m 1, maka loop yang sama for i 1 to m do P(i) akan memerlukan waktu : t(1) + t(2) + … + t(m).
Analysing Control Structure (4) Perhatikan algoritma function FibIter(n) i 1; j 0 for k 1 to n do j i+j i j-i return j Instruksi di dalam “loop” membutuhkan waktu konstan, misal terbatas atas oleh suatu konstan c. Dengan mengabaikan waktu untuk “loop control”, maka waktu akan terbatas atas oleh nc. Karena instruksi sebelum dan sesudah “loop” diabaikan, maka algoritma memerlukan waktu dalam O(n).
Analysing Control Structure (5) Dengan Moivre’s formula : ukuran f k berada dalam Θ(k). Sehingga, iterasi ke-k memerlukan waktu Θ(k-1) + Θ(k), atau sama dengan Θ(k). Misal c : konstan sedemikian hingga waktu ini terbatas atas oleh ck untuk semua k 1. Jika waktu untuk “loop control”, instruksi sebelum dan sesudah “loop” diabaikan, maka waktu yang dibutuhkan algoritma terbatas atas oleh k=1..n ck = c[n(n+1)/2] O(n 2 ). Alasan serupa menghasilkan (n 2 ), sehingga waktu yang dibutuhkan algoritma dalam Θ(n 2 )
Analysing Control Structure (6) Ada perbedaan besar, antara analysis FibRec yang memperhitungkan operasi aritmatik sebagai “unit cost” dengan yang tidak memperhatikannya. Analysis “for loop” yang mulainya selain dari 1, bertambah dengan pertambahan lebih besar. Misal, for i 5 to m step 2 do P(i) Untuk m 3, P(i) akan dieksekusi sebanyak ((m-5) 2) + 1 kali.
Analysing Control Structure (7) RECURSIVE CALL, perhatikan algoritma FibRec berikut function FibRec(n) if n<2 then return n else return FibRec(n-1)+FibRec(n-2) Misal T(n) : waktu untuk “call on” FibRec(n). Jika n<2, algoritma hanya mengembalikan n, yang memerlukan waktu konstan a. Jika n 2, kebanyakan kerja dilakukan untuk dua “recursive calls”, yang masing-masing memerlukan waktu T(n-1) dan T(n-2).
Analysing Control Structure (8) Ditambah satu addition f n-1 dan f n-2 (nilai-nilai kembalian oleh “recursive calls”), “recursion control”, dan test ”if n < 2”. Misal h(n) : kerja yang melibatkan operasi- operasi di atas. Maka dengan definisi T(n) dan h(n) akan didapat rekursi berikut T(n) = a, jika n=0 atau n=1 T(n) = T(n-1) + T(n-2) + h(n), jika n=2,3,…
Analysing Control Structure (9) WHILE and REPEAT LOOPs, lebih sulit untuk dianalisa dibanding dengan FOR LOOP. Perhatikan algoritma berikut function Bin_Search(T[ 1..n ],x) i 1; j n while i<j do {T[i] x T[j]} k (i+j) 2 case x<T[k] : j k-1 x=T[k] : i, j k x>T[k] : i k+1 return i Misal d l : nilai j-i+1 di akhir perjalanan ke- l seputar loop untuk l 1 dan misal d 0 =n. Karena d l - 1 nilai j-i+1 sebelum mulai iterasi ke- l, maka d l d l- 1 / 2 ntuk semua l 1. Dengan induksi matematika maka didapat d l n / 2 l.
Analysing Control Structure (10) Loop terminate ketika d 1, yang terjadi ketika l = lg n . Jadi loop akan dimasuki paling banyak lg n kali. Karena masing- masing perjalanan seputar loop memakan waktu konstan, maka “binary search” memakan waktu dalam O(log n). Alasan serupa menghasilkan batas bawah (log n), sehingga binary search memakan waktu Θ(log n).
Using a Barometer Barometer instruction : instruction yang dieksekusi paling sedikit sesering instruction lain dalam algoritma. Ketika algoritma melibatkan beberapa “nested loops”, maka setiap instruction dari “innermost loop” biasanya bisa digunakan sebagai “barometer”.
Supplementary Examples SELECTION SORT, perhatikan procedure select(T[1..n]) for i 1 to n-1 do minj I; minx T[i] for j i+1 to n do if T[j]<minx then minj j minx T[j] T[minj] T[i] T[i] minx
Supplementary Examples (1) SELECTION SORT, waktu yang diperlukan oleh masing-masing putaran “inner loop” tidak konstan – khususnya jika T[j]<minx – tapi terbatas atas oleh suatu konstanta c. Untuk masing-masing i, instruksi dalam “inner loop” dieksekusi n-(i+1)+1=n-i kali. Sehingga, waktu yang diperlukan oleh “inner loop” adalah t(i) (n- i)c. Waktu yang diperlukan putaran ke-i di “outer loop” terbatas atas oleh b+t(i) untuk konstanta b yang tepat.
Supplementary Examples (2) SELECTION SORT, Sehingga, total waktu yang dihabiskan algoritma terbatas atas oleh ½ cn 2 + (b – ½ c)n – b. Atau berada dalam O(n 2 ), secara serupa dalam (n 2 ). Jadi berada dalam Θ(n 2 ). Jika “innermost test – if T[j]<minx” sebagai barometer, dan menghitung banyaknya kali test tersebut dieksekusi. Yaitu, i=1..n-1 j=i+1..n 1 = n(n-1)/2
Supplementary Examples (3) INSERTION SORT, perhatikan procedure insert(T[1..n]) for i 2 to n do x T[i]; j i-1 while i> 0 and x<T[j] do T[j+1] T[j] j j-1 T[j+1] x Barometer : banyaknya kali “while loop condition” ditest.
Supplementary Examples (4) Asumsi i fixed, x = T[i]. Worse case muncul ketika x < T[j] untuk setiap j antara 1 dan i- 1, karena harus membandingkan x dengan T[i-1], T[i-2], …, T[1] sebelum meninggalkan loop “while”. Sehingga, “while loop test” dikerjakan i kali. Worse case terjadi untuk setiap nilai i dari 2 sampai n. Sehingga “barometer test” dikerjakan dalam i=2..n i = n(n+1)/2 – 1 kali.
Supplementary Examples (4) EUCLID’S ALGORITHM, perhatikan function Euclid(m,n) while m> 0 do t m m n mod m n t return n Untuk setiap dua bilangan bulat m dan n, dengan n m, maka berlaku n mod m < n/2.
Supplementary Examples (5) EUCLID’S ALGORITHM, Jika m>n/2, maka 1 n/m<2, sehingga n m=1, yang berakibat bahwa n mod m = n- m (n m) = n-m < n-n/2 = n/2. Jika m n/2, maka n mod m <m n/2. Dengan tanpa mengurangi generality, asumsikan n m (jika n<m, putaran pertama loop akan swap m dan n. Karena n mod m = n ketika n < m).
Supplementary Examples (6) Kondisi di atas, dipertahankan di masing- masing loop, karena n mod m tidak pernah lebih dari m. Total waktu yang digunakan algoritma adalah dalam order banyaknya putaran loop. Misal # of trips around the loop terbatas atas oleh function of n. Apa yang terjadi dengan m dan n setelah putaran loop kedua (misal, algoritma belum berhenti).
Supplementary Examples (7) Misal m 0 dan n 0 nilai-nilai awal parameter, setelah putaran pertama m menjadi n 0 mod m 0. Setelah putaran ke-2, n mengambil nilai n 0 mod m 0. Sehingga n menjadi < n 0 /2, dengan kata lain nilai n paling tidak menjadi separoh setelah putaran ke-2. Akan tetapi, masih berlaku n m sehingga argumentasi serupa masih diterapkan lagi. Kesimpulan : loop akan dimasuki secara kasar paling banyak 2 lg n kali.
Supplementary Examples (8) THE TOWERS OF HANOI, contoh analisa “recursive algorithm”. Generalisasi permasalahan, an arbitrary number n of rings. Solusi : untuk memindahkan m rings yang lebih kecil dari tiang i ke tiang j, pertama-tama dipindahkan m-1 rings yang lebih kecil dari tiang k ke tiang j. (Ada tiga buah tiang (rod) i, j, dan k).
Supplementary Examples (9) THE TOWERS OF HANOI, perhatikan procedure Hanoi(m,i,j) { memindah m smallest rings dari tiang i ke tiang j } if m> 0 then Hanoi(m-1,i,6-i-j) write i “ ” j Hanoi(m-1,6-i-j,j) Untuk menganalisa waktu eksekusi algoritma di atas, instruksi write digunakan sebagai “barometer”.
Supplementary Examples (10) THE TOWERS OF HANOI, Misal t(m) : # of times call of Hanoi(m,.,.) dieksekusi. Dengan pengamatan terhadap algoritma, maka t(m) = 0, jika m= 0 t(m) = 2t(m-1) + 1, jika m> 0 Selanjutnya bisa diperlihatkan bahwa t(m) = 2 m – 1.