ANALISIS ALGORITMA REKURSIF DAN NONREKURSIF KELOMPOK 2A I GUSTI BAGUS HADI WIDHINUGRAHA (1208605010) NI PUTU SINTYA DEWI (1208605017) LUH GEDE PUTRI SUARDANI (1208605018) I PUTU INDRA MAHENDRA PRIYADI (1208605020) DESAIN ANALISIS DAN ALGORITMA PENDAHULUAN Bagaimana menganalisis algoritma Rekursif ? Bagaimana menganalisis algoritma NonRekursif ? Bagaimana cara mencari kompleksitas waktu pada algoritma Rekursif dan Non- Rekursif ? Bagaimana cara menentukan notasi asimptotik dari algoritma Rekursif dan NonRekursif ? Manipulasi Penjumlahan Penting u u caca i1 i i1 u i u u (a b)a b i1 i i i1 i i1 i u limit atas dan bawah 1ul1;l u:integer il n(n1) 1 2 2 i i 12...n n (n ) 2 2 i0 i1 n n Manipulasi Penjumlahan Penting n(n 1)(2n 1) 1 3 i 1 2 ... n n 6 3 i1 n 2 2 2 2 n 1 k1 i 1 2 ... n n k 1 i1 k k k k n1 a 1 i 2 n a 1 a a ... a (a 1) a 1 i0 n n 1 i 1 12 ... 1n lnn ; 0.5772 ... i1 n lgi nlgn i1 Algoritma Rekursif Bentuk Rekursif Suatu subrutin/fungsi yang memanggil dirinya sendiri. Pemanggilan fungsi yang berulang terdapat dalam bodi fungsi Dengan rekursif, program akan lebih mudah dilihat Tujuan Bentuk Rekursif Menyederhanakan penulisan program Menggantikan bentuk iterasi Syarat Bentuk Rekursif Ada kondisi terminal (basis) Ada subroutine call yang melibatkan parameter yang nilainya menuju kondisi terminal (recurrence) Efisiensi Waktu Algoritma Recursive Langkah-langkah dalam analisis matematis dari algoritma rekursif: 1. 2. 3. 4. 5. 6. Tentukan parameter n yang menunjukkan ukuran input Tentukan operasi dasar algoritma (loop terdalam) Tentukan apakah untuk ukuran input yang sama banyaknya eksekusi basic operation sama atau berbeda. Tentukan relasi rekurens, dengan kondisi awal yang tepat untuk berapa kali algoritma akan dijalankan Menyelesaikan solusi relasi rekurens yang didapat di nomor 4 (t(n)) Tentukan g(n) dimana t(n) termasuk salah satu Contoh Menghitung faktorial Menar hanoi Menghitung Faktorial 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 Analisis 1 Ukuran input = n Kompleksitas waktu: Untuk kasus basis, tidak ada operasi perkalian T(0) = 0 (kondisi awal) Untuk kasus rekurens, kompleksitas waktu diukur dari jumlah perkalian (1) ditambah kompleksitas waktu untuk faktorial (n-1) Analisis 2 Kompleksitas waktu T(n) =1+T(n-1) T(n) =1+1+T(n-2)=2+T(n-2) T(n) =2+1+T(n-3)=3+T(n-3) =… =… = n+T(0) =n+0 Jadi T(n) = n T(n)∈ O(n) Visualisasi Menara hanoi Bagaimana memindahkan seluruh piringan tersebut ke sebuah tiang yang lain (dari A ke B); setiap kali hanya satu piringan yang boleh dipindahkan, tetapi tidak boleh ada piringan besar di atas piringan kecil. Ada tiang perantara C. Algoritma Procedure Hanoi (input n, A, B, C:integer) Algoritma If n=1 then Write (‘Pindahkan piringan dari’,A,’ke’,B) Else Hanoi(n-1,A,C,B) Writeln(‘Pindahkan piringan dari’,A,’ke’,B) Hanoi(n-1,C,B,A) Endif Relasi Rekurens T(n)=2n+1 adalah jumlah seluruh perpindahan piringan dari satu tiang ke tiang lainnya. Bila terdapat 64 tumpukan piringan da perpindahan 1 piringan butuh waktu 1 detik, maka waktu yang dibutuhkan : detik 264−1 detik = 10.446.744.073.709.551.615 detik = kira-kira 600 milyar tahun Visualisasi Algoritma Non Rekursif Efisiensi Waktu Algoritma Nonrekursif Langkah-langkah dalam analisis matematis dari algoritma nonrekursif: 1. 2. 3. 4. 5. Tentukan parameter n yang menunjukkan ukuran input. Tentukan operasi dasar algoritma (loop terdalam). Tentukan apakah untuk ukuran input yang sama banyaknya eksekusi operasi dasar yang dilakukan sama atau berbeda. Tentukan rumus sigma yang menunjukkan berapa kali operasi dasar dijalankan. Selesaikan rumus sigma untuk menghitung banyaknya operasi dasar dijalankan. Contoh: Perkalian Matriks Max Element Contoh1. Perkalian Matriks Algoritma PerkalianMatrik(A[0…n-1,0…n-1], B[0…n-1,0…n-1]) //mengalikan 2 matriks persegi berordo n //input: 2 matriks A dan B //output: Matriks C = AB for i 0 to n - 1 do for j 0 to n – 1 do C[i,j] 0,0 for k 0 to n – 1 do C[i,j] C[i,j] + A[i,k] * B[k,j] return C Contoh1. Analisis(1) Ukuran input = matriks ordo n Loop terdalam = perkalian dan penambahan calon operasi dasar Perkalian dan pertambahan dilakukan tepat sekali dalam setiap perulangan, sehingga kita tidak harus memilih antara dua operasi Jumlah dari total perkalian n 1 n 1 n 1 n 1 n 1 n 1 2 3 M ( n ) 1 n n n i 0 j 0 k 0 i 0 j 0 i 0 Contoh1. Analisis (2) Perkiraan waktu berjalannya algoritma pada mesin tertentu T ( n ) c M ( n ) cn m 3 m Perkiraan yang lebih akurat (termasuk penambahan) 3 3 3 T ( n ) c M ( n ) c A ( n ) c n c n ( c c ) n m a ma m a cm :waktu satu perkalian ca :waktu satu tambahan Visualisasi Contoh2. 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 max A[0] for i 1 to n-1 do if A[i] > max max A[i] return max Contoh2. Analisis (1) Ukuran input dari algoritma ini adalah jumlah elemen pada array, yaitu n. Operasi dasar yang paling banyak dieksekusi ada dalam loop for. 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. Contoh2. Analisis (2) Visualisasi Pertanyaan Mengapa dalam T(n) ∈ O(n) memakai notasi O? Dan mengapa dalam manipulasi penjumlahan penting terdapat pernyataan ? n (Meri Sriyati) T (n ) O (2 ) Buktikan bahwa ? (Eka Ayuningsih) Apa maksud dari terminal dan body fungsi? (Tutde Suputrawan) Pembahasan 1. Pembuktian T(n)∈ O(n) Misalkan diberikan limit : Sehingga lim lim t ( n ) lim n 1 1 n n g ( n )n n Jadi benar bahwa T(n)∈ O(n) Pembuktian1n (n) 2 2 2 Misalkan diberikan limit: TA(n) lim n~ TB(n) Jika hasil: 0 maka OoG TA(n) < OoG TB(n) notasi : O C maka OoG TA(n) = OoG TB(n) notasi : Ɵ ∞ maka OoG TA(n) > OoG TB(n) notasi : Ω Sehingga Jadi benar 12 n lim lim 11 2 2 n n n 22 12 (n2) bahwa2n n 2. Pembuktian T ( n ) O ( 2 ) n lim 1 1 lim 0 n n n n 2 log 2 . 2 Jadi benar bahwa T(n)O(2n) 3. Terminal adalah kondisi awal dari suatu fungsi rekursif, dimana kondisi terminal adalah tempat perhentian fungsi rekursif, sedangkan body fungsi mengandung fungsi rekursif . Pemanggilan fungsi yang berulang terdapat dalam bodi fungsi. Contoh dalam pseudocode faktorial, yang menjadi terminal adalah if (n=0) then return 1, yang menjadi bodi fungsi adalah return (n*factorial(n-1))