Algoritma dan Struktur Data Analisa Algoritma Teknik Informatika Universitas Muhammadiyah Malang 2011
Tujuan Instruksional Memahami tentang metode untuk analisa algoritma
Topik Big-O
Algorithms Complexity Mendapatkan algoritma yang efisien. Ukuran efisien : minim dalam kebutuhan ruang dan waktu. Bergantung pada jumlah data yang diproses.
Mana yang lebih baik? pilihan 1 : Algoritma biasa dengan komputer yang cepat. pilihan 2 : Menggunakan algoritma yang efisien dengan komputer standart.
Studi Kasus Algoritma yang waktu eksekusinya dalam orde eksponensial Sebuah komputer yang mampu menjalankan program dengan masukan n dalam waktu detik. n = jumlah data. n 2 -4 10
Penyelesaian Dapat dihitung T(n) dari persamaan 10-4 x 2n : n = 10, waktu eksekusi kurang lebih 1/10 detik. n=20, waktu eksekusi kurang lebih 2 menit. n=30, waktu eksekusi lebih dari satu hari. n=38?
Efficiency Computer Jika kecepatan komputer di-upgrade sebesar 100 kali ( ). Maka dengan algoritma yang sama : jumlah masukan = n, waktu = detik. n=45, waktu yang dibutuhkan kurang lebih satu tahun penuh. -6 10 -6 n 10 x 2
Efficiency Algorithms Misal ada algoritma baru yang dapat menyelesaikan masalah tsb dalam orde kubik ( ) Dengan menggunakan komputer pertama waktu yang dibutuhkan detik. Sehingga : n = 900, waktu yang dibutuhkan kurang dari 1 hari. 3 n -4 3 10 x n
Efficiency Algorithms Dengan komputer pertama berapa besar masukan yang dapat diproses selama satu tahun?... Dengan komputer kedua berapa masukan yang dapat diproses selama satu tahun?...
Efficiency Algorithms waktu = (kurang lebih) 1 tahun Komputer 1, n = 6800 Komputer 2, n = 31.500
Time Complexity (Kompleksitas Waktu)
Time Complexity Berdasarkan jumlah operasi/perintah yang dieksekusi. Pada algoritma pengurutan dan pencarian operasi abstrak yang mendasari adalah perbandingan (operator : if).
Contoh Berikut adalah algoritma untuk mencari elemen terbesar dalam deret array yang berukuran n elemen. Lakukan analisa pada algoritma tersebut menggunakan kompleksitas waktu dengan menghitung jumlah operasi perbandingan.
Algoritma (1) Komplekasitas waktu T(n) = n-1 Void Cari_maksimum(int n, int A[]) { int maks = A[0]; for(int i=1;i<n;i++) if(A[i]>maks) maks = A[i]; } Komplekasitas waktu T(n) = n-1
Contoh Misal waktu yang dibutuhkan sebuah PC untuk melakukan operasi perbandingan adalah detik. Maka untuk n=1000, kebutuhan waktu untuk algoritma cari_maksimum diatas adalah : T(1000) = (1000-1) x T(1000) = 0.000999 detik -6 10 -6 10
Time Complexity Dibedakan menjadi 3 macam : Tmax(n) Tmin(n) Tavg(n)
Contoh Berikut adalah algoritma pencarian sequential search. Dimana bilangan yang ada pada array telah terurut ascending dan tidak ada bilangan yang sama. Hitunglah kompleksitas waktu terbaik, terburuk, dan rata-rata. Asumsikan elemen yang dicari (x) ada.
Algoritma (2) Void pencarian_sequential(int n, int A[],int x) { int j=0; boolean ketemu=false; while(j<n && ketemu=false) if(A[j]== x) ketemu = true; else j++; } if(ketemu) System.out.print(j); else System.out.print(0);
Pembahasan Algoritma tersebut membandingkan tiap elemen yang ada pada array dengan x. Operasi perbandingan yang dihitung adalah A[j] = x. Best case, jika elemen pertama array = x. Sehingga Tmin(n) = 1. Worst case, jika A[n-1]=x atau x tidak ditemukan. Sehingga Tmax(n) = n. Average case, jika x ditemukan pada posisi ke-j, maka A[j] = x akan dieksekusi sebanyak j kali. Sehingga Tavg(n) = (n+1)/2
(Kompleksitas Waktu Asimptotik) Big-O (Kompleksitas Waktu Asimptotik)
Kompleksitas Waktu Asimptotik Pada kompleksitas waktu asimptotik, kinerja algoritma diukur dengan membuat makna “sebanding”. Yaitu dengan menghilangkan faktor koefisien dalam ekspresi T(n).
Contoh Misal worst case dari sebuah algoritma adalah T(n) = 2n2 + 6n + 1 Untuk n yang besar, T(n) sebanding dengan n pangkat 2 (lihat tabel dibawah) n T(n) = 2n2 + 6n + 1 n2 10 261 100 2061 1000 2.006.001 1.000.000 10000 1.000.060.001 1.000.000.000
Penjelasan Suku-suku yang tidak mendominasi pada T(n) dapat diabaikan, sehingga kompleksitas waktu untuk T(n) adalah 2(n2) + suku-suku lainnya. Dengan mengabaikan koefisien 2 pada 2n^2 maka T(n) = O(n2) [dibaca : T(n) adalah O dari n2] Jadi kita telah mengganti ekspresi T(n) = 2n2 + 6n + 1 dengan yang lebih sederhana seperti n2. Notasi O disebut notasi Big-O yang merupakan notasi untuk kompleksitas waktu asimptotik.
Notasi Big-O T(n) = O(f(n)) dibaca Tn adalah O dari f(n) Bila terdapat koefisien C dan n0 maka : T(n) <= C(f(n)) Untuk menunjukkan T(n) = O(f(n), yang perlu dilakukan adalah menemukan pasangan C dan n0 sehingga
Contoh Tunjukan bahwa : T(n) = 3n +2 = O(n) penyelesaian : karena 3n + 2 <= 3n +2n = 5n untuk n>=1 maka C = 5 dan n0 =1 T(n) = 2n2 + 6n + 1 = O(n2)
Contoh Penyelesaian : 2n2 +6n + 1 = O(n2) Untuk semua n>=1 2n2 +6n + 1 <= 2n2 +6n2 + n2 =9n2 sehingga C = 9 dan n0 =1 atau : Untuk semua n>=6 2n2 +6n + 1 <= n2 +n2 + n2 =3 n2 sehingga C = 3 dan n0 =6
Teorema Big-O Misal T1(n) = O(f(n)) dan T2(n) = O(g(n)), maka : 1. T1(n) + T2(n) = O(f(n)) + O(g(n)) = O(max(f(n),g(n))) 2. T1(n)T2(n) = O(f(n))O(g(n)) = O(f(n)g(n)) 3. O(cf(n)) = O(f(n)), c adalah tetapan 4. f(n) = O(f(n))
Aturan Big-O Dapat ditentukan dengan salah satu dari 2 cara berikut : Jika kompleksitsa waktu T(n) dari algoritma diketahui, maka kompleksitas waktu asimptotik dapat langsung ditentukan denganmengambil suku yang mendominasi fungsi T dan menghilangkan koefisien-nya. contoh : T(n) = n-1 = O(n) T(n)=(n+1)/2=O(n)
Aturan Big-O 2. Menghitung Big-O untuk setiap instruksi didalam algoritma kemudian menerapkan teorema Big-O. Aturan : Pengisian nilai(assignment), perbandingan, operasi aritmatik, read, write : membutuhkan waktu O(1) Pengaksesan array, memilih field dari sebuah record : waktu O(1). If C then S1 else s2, membutuhkan waktu Tc + max(Ts1, Ts2) yang dalam hal ini Tc, Ts1, dan Ts2 adalah kompleksitas waktu C, S1, dan S2.
Aturan Big-O d.Perulangan for, kompleksitas waktunya adalah jumlah perulangan dikali dengan kompleksitas waktu dari body perulangan. e. While C do S atau repeat S until C. Untuk kedua perulangan tersebut kompleksitas waktu yang dibutuhkan adalah jumlah perulangan dikali dengan kompleksitas waktu dari body C dan S. Prosedur dan fungsi. Waktu yang dibutuhkan untuk memindahkan kendali dari fungsi yang dipanggil adalah O(1). Untuk fungsi/prosedur rekursif, digunakan teknik perhitungan kompleksitas dengan relasi rekurens.
Pengelompokan Algoritma (Berdasarkan Notasi Big-O) Constant O(1) Logarithmic O(log n) Linear O(n) Quadratic O(n2) Cubic O(n3) Polynomial O(np) Exponential O(an)
Notasi Big-Omega dan Big-Tetha Big-Ω (Big-Omega) Digunakan untuk mendefinisikan batas bawah (lower bound) dalam kompleksitas waktu. T(n) = Ω (g(n)) (dibaca T(n) adalah Omega dari f(n)) T(n) berorde paling kecil g(N) bila terdapat koefisien C dan no sedemikian sehingga : T(n) ≥ C(f(n)) untuk n ≥ no Big-Θ (Big-Tetha) T(n) = Θ (h(n)) (dibaca T(n) adalah tetha dari h(n)) T(n) berorde sama dengan h(n) jika T(n)=O(h(n)) dan T(n)= Ω(g(n))
Contoh Tentukan notasi Ω dan Θ untuk T(n) = 2n2+6n+1. jawab : 2n2+6n+1 ≤ 9n2 n ≥ 1 (C=9) maka : 2n2+6n+1 =O(n2 ) 2n2+6n+1 ≥ 2n2 n ≥ 1 (C=2) maka : 2n2+6n+1 =Ω(n2 ) Karena 2n2+6n+1 =O(n2 ) dan 2n2+6n+1 =Ω(n2 ), maka 2n2+6n+1 =Θ(n2 )
Space Complexity (Kompleksitas Ruang)
Space Complexity Space/memory
Latihan Tentukan waktu yang dibutuhkan [T(n)] untuk tiap kinerja algoritma berikut dengan kecepatan PC sebesar 10-9 untuk jumlah data berturut turut 10, 15, 20, 25, dan 30 : n n2 n3
Latihan 1. Pada algoritma berikut berapa kali pemanggilan foo(). for (j = 1; j <= N; ++j) { foo( ); }
Latihan 2. Berapa kali perintah x=x+1 pada algoritma berikut di-eksekusi? Nyatakan kompleksitas waktu asimptotiknya dalam Big-O. i = 2; while(i<n) { i=i*i; x=x+1; }
Latihan Tentukan kompleksitas waktu asimptotik (Big-O) Tunjukkan bahwa T(n) = O(f(n)) dengan menemukan pasangan C dan n0 sehingga T(n) ≤ C(f(n)). T(n) = n+1024 = O(n) T(n) = 10n2+4n+2 = O(n2)
Latihan Tentukan kompleksitas waktu asimptotik (Big-Ω) Tuliskan notasi Big-omega untuk tiap fungsi berikut : 6n3+12n2+1 10n2+4n+2
Tugas 1. Tentukan waktu yang dibutuhkan [T(n)] untuk tiap kinerja algoritma berikut dengan kecepatan PC sebesar 10-15 untuk jumlah data berturut turut 90, 125, dan 150 : a. n b. n3 c. n2 2n
Tugas Tunjukkan bahwa T(n) = O(f(n)) dengan menemukan pasangan C dan n0 sehingga T(n) ≤ C(f(n)). T(n) = n2/10+2n = O(2n) T(n) = 6n2 + 2n = O(2n) T(n) = 3n2+2n+5 = O(n2)
Pustaka Sartaj Sahni , “Data Structures & Algorithms”, Presentation L20-24. Mitchell Waite, “Data Structures & Algorithms in Java”, SAMS, 2001