E. Haodudin Nurkifli Teknik Informatika Universitas Ahmad Dahlan
Jenis algoritma Divide and conquer : menyederhanakan problem yang besar. Greedy methode : mencari yang optimal pada saat itu. Algoritma : jumlah langkah yang berhingga (finite) instruksinya jelas Contoh : for i do 10 then .....
Tujuan Menganalisis algoritma Efisiensi waktu Efisiensi storage Analisis algoritma Menentukan karakteristik kinerja (memprediksi sumber daya) Mengapa ? Memilih algoritma yang paling efisien dari beberapa alternatif penyelesaian untuk kasus yang sama Mencari waktu yang terbaik untuk keperluan praktis Apakah algoritma itu optimal untuk beberapa kasus atau ada yang lebih baik
Runing time fungsi dari input size Memanggil instruksi sederhana dan mengakses ke memory word sebagai primitive operation atau step Jumlah step eksekusi algoritma pada input tersebut Dikenal juga complexity and input
Kompleksitas tergantung Ukuran input bergantung pada problem Misalkan jumlah data yang diurutkan Karakter lain dari input Apakah data sudah terurut Apakah ada lingkaran dalam grafik
Kompleksitas Worst-case : kompleksitas waktu untuk waktu terburuk (waktu tempuh bernilai maksimum dari suatu fungsi f(n)) atau Tmax(n) Best-case : kompleksitas waktu untuk waktu terbaik (kompleksitas waktu yang bernilai minimum dari suatu fungsi f(n)) atau Tmin(n) Average-case : kompleksitas waktu untuk kasus rata-rata
Metode Analisis 1. Asymptotic/theoretic/mathematic : berdasarkan pendekatan secara teori atau atas dasar analisa secara matematik 2. Empirical/Practical/Empiris/Praktis : berdasarkan pendekatan praktis yang biasanya didasarkan atas data- data yang telah ada atau data-data yang di-generete / dibangkitkan Asymptotic Menggambarkan karakteristik/perilaku suatu algoritma pada batasan tertentu (berupa suatu fungsi matematis) Dituliskan dengan notasi matematis yg dikenal dgn notasi asymptotic Notasi asymptotic dapat dituliskan dengan beberpa simbul berikut - O, O, O, o, e - O, O, O, o, e Didefinisikan untuk fungsi diatas nilai biasa Contoh: f(n) = O(n 2 ). Menggambarkan bagaimana fungsi f(n) tumbuh pd pembandingan untuk n 2 . Mendefinisikan himpunan fungsi ; Pada prakteknya untuk membandingan 2 ukuran fungsi. Notasi menggambarkan perbedaan rate- of-growth hubungan antara definisi fungsi dan definisi himpunan fungsi.
Notasi Asymptotic Notasi O (big Oh) Untuk fungsi g(n),kita definisikan O(g(n)) sbg big-Oh dari n, sbg himpunan: O(g(n)) = {f(n) : - konstanta positif c dan n 0, sedemikian rupa n > n 0 , sehingga 0 s f(n) s cg(n) } Ada konstanta n - : ada, : untuk semua Lanjt f(n) Secara intuitif : himpunan seluruh fungsi yg rate of growth nya adalah sama atau lebih kecil dari g(n). g(n) adalah asymptotic upper bound untuk f(n). f(n) = O(g(n)) f(n) = O(g(n)). O(g(n)) c O(g(n)). Lanjt 2.99( = 2.50( = 2.0001( = 3n + 7( = ? (tidak bakal lebih 4n) 2n 2 + 5( = ? Big Oh O adalah merupakan Upper bound dari suatu fungsi 3 (pembulatan ke atas dalah 3) 3 3 Contoh f(n) = 3n + 4 berapa / apa big oh-nya ? 3n+4 <= Cn ? 3*2+4 <=3*3 10<=9 ? Bgm dgn n 0 = 2 C =4 3n+4 <= cn ? 3*2+4 <=4*2 ? Bgm dgn n 0 = 3 C =4 3n+4 <= cn ? 3*3+4 <=4*3 ? Tidak akan pernah terpenuhi berapapun nilai n Bgm dgn n 0 = 4 C =4 3n+4 <= cn ? 3*4+4 <=4*4 ? Apa kesimp ulannya n 0 = 2 C =3 ? Lanjt Sehingga dari f(n) = 3n+4 akan terpenuhi f(n) <= 4n untuk n >= 4 berarti f(n)=O(4n) untuk n 0 =4 n 4n 3n+4 n=4 f(n) Contoh dan Latihan Apa fungsi big Oh dari
4n ? 2n+7 ?
n 2 ? n 2 +3 ? Notasi O (big Omega) O(g(n)) = {f(n) : - konstanta positif c dan n 0, sedemikian hingga n > n 0 , maka 0 s cg(n) s f(n)} Untuk fungsi g(n),kita definisikan O(g(n)) sbg big- Omega dari n, sbg himpunan: Lanjt g(n) adalah asymptotic lower bound untuk f(n). f(n) = O(g(n)) f(n) = O(g(n)). O(g(n)) c O(g(n)). f(n) Secara intuitif : himpunan dari semua nilai fungsi yang rate of growth-nya adalah sama atau lebih tinggi dari g(n). Lanjt 2.0001 = 2.50 = 2.99 = 3n + 7 = 2n 2 + 5 = Big Omega O adalah merupakan Lower bound dari suatu fungsi 2 (batas bawah tidak akan kurang dari 2) 2 2 ? ? Notasi O (big theta) Untuk fungsi g(n),kita definisikan O(g(n)) sbg big-theta dari n, sbg himpunan sprt berikut O(g(n)) = {f(n) : - konstanta positif c 1 , c 2 dan n 0, sedmikian rupa n > n 0 , maka 0 s c 1 g(n) s f(n) s c 2 g(n)} Lanjt Big theta O adalah merupakan tight bound dari suatu fungsi f(n) merupakan O(g(n)) pada nilai antara c1 smp c2 g(n) adalah asymptotically tight bound untuk f(n). Lanjt Secara intuitif : himpunan seluruh fungsi yang rate of growth-nya sama dengan g(n). Secara teknik, f(n) e O(g(n)). Penggunan sebelumnya, f(n) = O(g(n)). Mana yg akan kita teima ? f(n) dan g(n) nonnegative, untuk nilai n besar. Contoh O(g(n)) = {f(n) : - konstanta positif c 1 , c 2 , dan n 0 , yg mana n > n 0 , 0 s c 1 g(n) s f(n) s c 2 g(n)} 10n 2 - 3n = O(n 2 ) Apa nilai konstanta n 0 , c 1 , dan c 2 sehingga akan terpenuhi fungsi tsb? Buat c 1 sedkit lebih kecil dari koefisien utama, dan c 2 sedikit lebih besar. Untuk membandingkan tingkat pertumbuhan, lihat term utama. Latihan: Buktikan bahwa n 2 /2-3n = O(n 2 )
Relasi antara O, O, O Relasi antara O, O, O Teorema : untuk 2 fungsi g(n) dan f(n), f(n) = O(g(n)) jika f(n) = O(g(n)) dan f(n) = O(g(n)). yakni, O(g(n)) = O (g(n)) O (g(n)) Dalam prakteknya, nilai O (atau tight bounds) didapat dari asymptotic upper bound dan lower bound. Running Time Running time dari suatu algoritma, secara matematis adalah suatu fungsi input n untuk sejumlah n data Misal f(n)=n 2 berarti fungsi runing time dari sejumlah n data adalah n 2
Running time merupakan fungsi kebutuhan sumberdaya yang diperlukan suatu algoritma (atau implementasinya) untuk memproses sejumlah data n Lanjt Running time-nya O(f(n)) O(f(n)) adalah sbgWorst case-nya O(f(n)) batasan pd worst-case running time O(f(n)) batasan pada running time dari setiap input. . O(f(n)) batasan pd worst-case running time O(f(n)) batasan pd running time dari setiap input. Running time -nya O (f(n)) O(f(n)) sbg Best case-nya Analisis Empiris ?