Algoritma dan Struktur Data Pertemuan 6 Pembahasan tugas 3
Pangkat xn , n>=0. Base case adalah jika n bernilai 0 maka jawabannya adalah 1. Recursive casenya adalah : xn = x * xn-1. x * x n-1, n>0 1, n = 0 xn
Implementasikan fungsi pangkat dalam bahasa C dalam bentuk iteratif dan rekursifnya Hitung C(n), Efisiensi waktu algoritma pangkat ada pada kelas apa? Dikumpulkan pada pertemuan kedua sesudah lebaran Tugas dibahas oleh mahasiswa dengan nomor urut mod 10 == 9
Program #include <stdio.h> #include <conio.h> float pangkat(int X, int n); void main() { int A = 4; int B = 3; printf("%d pangkat %d adalah %f", A, B, pangkat(A, B)); getch(); } float pangkat(int X, int n) if (n == 0) return(1); else return(X * pangkat(X, n - 1));
Metrik untuk ukuran input Sesuatu pada input yang jika membesar, maka pemanggilan fungsi rekursif bertambah Pada kasus ini adalah nilai n. Jika n membesar, maka pemanggilan fungsi rekursi bertambah Kompleksitas dinyatakan sebagai fungsi dari n Untuk memahaminya coba gambar pohon rekursifnya.
Salah satu operasi pada recursive casenya Basic operation Salah satu operasi pada recursive casenya Basic operationnya dapat dipilih * yang dilakukan 1 kali untuk setiap pemanggilan fungsi rekursif return(X * pangkat(X, n - 1))
Banyaknya eksekusi basic operation Jika algoritma pangkat dieksekusi dengan input (X, n), maka basic operation dieksekusi satu kali. Namun pada saat eksekusi, algoritma tersebut juga memanggil dirinya sendiri dengan input n-1. Hal ini mengakibatkan pada pemanggilan pangkat(X, n - 1) basic operation dieksekusi lagi. Proses rekursi dilakukan terus selama nilai n > 0. return(X * pangkat(X, n - 1))
Banyaknya eksekusi basic operation Jika C(n) menyatakan banyaknya basic operation dieksekusi untuk input (X, n) dan C(n - 1) menyatakan banyaknya basic operation dieksekusi untuk input (X, n-1), maka hubungan antara C(n) dan C(n - 1) dinyatakan dengan C(n) = C(n - 1) + 1 untuk n > 1 C(0) = 0, base case
Case Apakah ada best case, average case dan worst case? Tidak ada Untuk input n tertentu misal X = berapa saja dan n = 4, banyaknya pemanggilan fungsi rekursif selalu sama. Sehingga tidak ada best case, average case dan worst case
Perhitungan efisiensi waktu Untuk mengetahui efisiensi waktunya kita harus menemukan persamaan langsung (non recursive) dari C(n)
Perhitungan efisiensi waktu Menggunakan metode backward substitution, dicari pola dari C(n) : C(n) = C(n - 1) + 1 C(n) = (C(n - 2) + 1) + 1 = C(n) = C(n - 2) + 2 C(n) = (C(n - 3) + 1) + 2 = C(n) = C(n - 3) + 3 dst Pola atau bentuk umum yang didapatkan adalah C(n) = C(n - i) + i.
Perhitungan efisiensi waktu Nilai initial condition C(0) disubtitusikan ke C(n - i) pada bentuk umum C(n). C(n) = C(n - i) + i C(n) = C(0) + i C(n) = i
Perhitungan efisiensi waktu Subtitusi tersebut mensyaratkan C(n - i) = C(0) atau n – i = 0 i = n nilai i = n disubtitusikan ke bentuk umum C(n) = i sehingga C(n) = n C(n) Є O(n) Apa artinya? Jika untuk menghitung 43 membutuhkan t satuan waktu maka untuk menghitung 46 membutuhkan 2t satuan waktu!