Kompleksitas Algoritma Algorithms Complexity Oleh Nur Hayatin S

  • Slides: 45
Download presentation
Kompleksitas Algoritma (Algorithms Complexity) Oleh : Nur Hayatin, S. ST Teknik Informatika - Universitas

Kompleksitas Algoritma (Algorithms Complexity) Oleh : Nur Hayatin, S. ST Teknik Informatika - Universitas Muhammadiyah Malang (UMM) Tahun Akademik 2010 -2011

Sub Topik • Algorithms Complexity • Time complexity – Big-O, Big-Ω (Big-Omega), Big-Θ (Big-Tetha)

Sub Topik • Algorithms Complexity • Time complexity – Big-O, Big-Ω (Big-Omega), Big-Θ (Big-Tetha) • Space complexity • Latihan & Tugas

Algorithms Complexity (Kompleksitas Algoritma)

Algorithms Complexity (Kompleksitas Algoritma)

Algorithms Complexity • Mendapatkan algoritma yang efisien. • Ukuran efisien : minim dalam kebutuhan

Algorithms Complexity • Mendapatkan algoritma yang efisien. • Ukuran efisien : minim dalam kebutuhan ruang dan waktu. • Bergantung pada jumlah data yang diproses.

Jumlah Data (n) Ukuran masukan/jumlah data disimbolkan dengan n. Contoh : 1. Mengurutkan 1000

Jumlah Data (n) Ukuran masukan/jumlah data disimbolkan dengan n. Contoh : 1. Mengurutkan 1000 buah elemen array, maka n adalah 1000 (n=1000). 2. Menghitung 6!, maka n adalah 6 (n=6). dll.

Mana yang lebih baik? • pilihan 1 : Algoritma biasa dengan komputer yang cepat.

Mana yang lebih baik? • pilihan 1 : Algoritma biasa dengan komputer yang cepat. • pilihan 2 : Menggunakan algoritma yang efisien dengan komputer standart.

Studi Kasus 1. Algoritma yang waktu eksekusinya dalam orde n eksponensial ( 2 )

Studi Kasus 1. Algoritma yang waktu eksekusinya dalam orde n eksponensial ( 2 ) 2. Sebuah komputer yang mampu menjalankan program dengan masukan n dalam waktu -4 10 detik. n = jumlah masukan.

Penyelesaian Dapat dihitung T(n) dari persamaan 10 -4 x 2 n : • n

Penyelesaian Dapat dihitung T(n) dari persamaan 10 -4 x 2 n : • 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 -6 100 kali ( 10 ).

Efficiency Computer • Jika kecepatan komputer di-upgrade sebesar -6 100 kali ( 10 ). Maka dengan algoritma yang sama : -6 n jumlah masukan = n, waktu = 10 x 2 detik. n=45, waktu yang dibutuhkan kurang lebih satu tahun penuh.

Efficiency Algorithms • Misal ada algoritma baru yang dapat menyelesaikan masalah tsb dalam orde

Efficiency Algorithms • Misal ada algoritma baru yang dapat menyelesaikan masalah tsb dalam orde kubik 3 (n ) • Dengan menggunakan komputer pertama waktu -4 3 yang dibutuhkan 10 x n detik. • Sehingga : n = 900, waktu yang dibutuhkan kurang dari 1 hari.

Efficiency Algorithms • Dengan komputer pertama berapa besar masukan yang dapat diproses selama satu

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 =

Efficiency Algorithms • waktu = (kurang lebih) 1 tahun • Komputer 1, n = 6800 • Komputer 2, n = 31. 500

Time Complexity (Kompleksitas Waktu)

Time Complexity (Kompleksitas Waktu)

Time Complexity • Berdasarkan jumlah operasi/perintah yang dieksekusi. • Pada algoritma pengurutan dan pencarian

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

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) Void Cari_maksimum(int n, int A[]) { int maks = A[0]; for(int i=1;

Algoritma (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 -6 melakukan operasi perbandingan adalah

Contoh • Misal waktu yang dibutuhkan sebuah PC untuk -6 melakukan operasi perbandingan adalah 10 detik. Maka untuk n=1000, kebutuhan waktu untuk algoritma cari_maksimum diatas adalah : -6 T(1000) = (1000 -1) x 10 T(1000) = 0. 000999 detik

Time Complexity • Dibedakan menjadi 3 macam : 1. Tmax(n) 2. Tmin(n) 3. Tavg(n)

Time Complexity • Dibedakan menjadi 3 macam : 1. Tmax(n) 2. Tmin(n) 3. Tavg(n)

Contoh • Berikut adalah algoritma pencarian sequential search. Dimana bilangan yang ada pada array

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;

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

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

Big-O (Kompleksitas Waktu Asimptotik)

Big-O (Kompleksitas Waktu Asimptotik)

Kompleksitas Waktu Asimptotik • Pada kompleksitas waktu asimptotik, kinerja algoritma diukur dengan membuat makna

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) = 2 n 2

Contoh • Misal worst case dari sebuah algoritma adalah T(n) = 2 n 2 + 6 n + 1 • Untuk n yang besar, T(n) sebanding dengan n pangkat 2 (lihat tabel dibawah) n 10 10000 T(n) = 2 n 2 + 6 n + 1 n 2 261 100 2061 1000 2. 006. 001 1. 000. 060. 001 1. 000

Penjelasan • Suku-suku yang tidak mendominasi pada T(n) dapat diabaikan, sehingga kompleksitas waktu untuk

Penjelasan • Suku-suku yang tidak mendominasi pada T(n) dapat diabaikan, sehingga kompleksitas waktu untuk T(n) adalah 2(n 2) + suku-suku lainnya. • Dengan mengabaikan koefisien 2 pada 2 n^2 maka T(n) = O(n 2) [dibaca : T(n) adalah O dari n 2] • Jadi kita telah mengganti ekspresi T(n) = 2 n 2 + 6 n + 1 dengan yang lebih sederhana seperti n 2. • 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

Notasi Big-O • T(n) = O(f(n)) dibaca Tn adalah O dari f(n) • Bila terdapat koefisien C dan n 0 maka : T(n) <= C(f(n)) • Untuk menunjukkan T(n) = O(f(n), yang perlu dilakukan adalah menemukan pasangan C dan n 0 sehingga T(n) <= C(f(n))

Contoh Tunjukan bahwa : • T(n) = 3 n +2 = O(n) penyelesaian :

Contoh Tunjukan bahwa : • T(n) = 3 n +2 = O(n) penyelesaian : 3 n + 2 = O(n) karena 3 n + 2 <= 3 n +2 n = 5 n untuk n>=1 maka C = 5 dan n 0 =1 • T(n) = 2 n 2 + 6 n + 1 = O(n 2)

Contoh • Penyelesaian : 2 n 2 +6 n + 1 = O(n 2)

Contoh • Penyelesaian : 2 n 2 +6 n + 1 = O(n 2) Untuk semua n>=1 2 n 2 +6 n + 1 <= 2 n 2 +6 n 2 + n 2 =9 n 2 sehingga C = 9 dan n 0 =1 atau : Untuk semua n>=6 2 n 2 +6 n + 1 <= n 2 + n 2 =3 n 2 sehingga C = 3 dan n 0 =6

Teorema Big-O • Misal T 1(n) = O(f(n)) dan T 2(n) = O(g(n)), maka

Teorema Big-O • Misal T 1(n) = O(f(n)) dan T 2(n) = O(g(n)), maka : 1. T 1(n) + T 2(n) = O(f(n)) + O(g(n)) = O(max(f(n), g(n))) 2. T 1(n)T 2(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 : 1. Jika

Aturan Big-O Dapat ditentukan dengan salah satu dari 2 cara berikut : 1. 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 Big-O 2. Menghitung Big-O untuk setiap instruksi didalam algoritma kemudian menerapkan teorema Big-O. Aturan : a. Pengisian nilai(assignment), perbandingan, operasi aritmatik, read, write : membutuhkan waktu O(1) b. Pengaksesan array, memilih field dari sebuah record : waktu O(1). c. If C then S 1 else s 2, membutuhkan waktu Tc + max(Ts 1, Ts 2) yang dalam hal ini Tc, Ts 1, dan Ts 2 adalah kompleksitas waktu C, S 1, dan S 2.

Aturan Big-O d. Perulangan for, kompleksitas waktunya adalah jumlah perulangan dikali dengan kompleksitas waktu

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. f. Prosedur dan fungsi. Waktu yang dibutuhkan untuk memindahkan kendali dari fungsi yang dipanggil adalah O(1). g. 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(n

Pengelompokan Algoritma (Berdasarkan Notasi Big-O) Constant O(1) Logarithmic O(log n) Linear O(n) Quadratic O(n 2) Cubic O(n 3) Polynomial O(np) Exponential O(an)

Notasi Big-Omega dan Big-Tetha • Big-Ω (Big-Omega) Digunakan untuk mendefinisikan batas bawah (lower bound)

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) = 2 n 2+6 n+1.

Contoh • Tentukan notasi Ω dan Θ untuk T(n) = 2 n 2+6 n+1. jawab : 2 n 2+6 n+1 ≤ 9 n 2 n ≥ 1 (C=9) maka : 2 n 2+6 n+1 =O(n 2 ) 2 n 2+6 n+1 ≥ 2 n 2 n ≥ 1 (C=2) maka : 2 n 2+6 n+1 =Ω(n 2 ) Karena 2 n 2+6 n+1 =O(n 2 ) dan 2 n 2+6 n+1 =Ω(n 2 ), maka 2 n 2+6 n+1 =Θ(n 2 )

Space Complexity (Kompleksitas Ruang)

Space Complexity (Kompleksitas Ruang)

Space Complexity • Space/memory

Space Complexity • Space/memory

Latihan • Tentukan waktu yang dibutuhkan [T(n)] untuk tiap kinerja algoritma berikut dengan kecepatan

Latihan • Tentukan waktu yang dibutuhkan [T(n)] untuk tiap kinerja algoritma berikut dengan kecepatan PC sebesar 10 -9 untuk jumlah data berturut 10, 15, 20, 25, dan 30 : 1. n 2 3. n 3

Latihan 1. Pada algoritma berikut berapa kali pemanggilan foo(). for (j = 1; j

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 dieksekusi? Nyatakan kompleksitas waktu asimptotiknya

Latihan 2. Berapa kali perintah x=x+1 pada algoritma berikut dieksekusi? 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

Latihan Tentukan kompleksitas waktu asimptotik (Big-O) • Tunjukkan bahwa T(n) = O(f(n)) dengan menemukan pasangan C dan n 0 sehingga T(n) ≤ C(f(n)). 1. T(n) = n+1024 = O(n) 2. T(n) = 10 n 2+4 n+2 = O(n 2)

Latihan Tentukan kompleksitas waktu asimptotik (Big-Ω) • Tuliskan notasi Big-omega untuk tiap fungsi berikut

Latihan Tentukan kompleksitas waktu asimptotik (Big-Ω) • Tuliskan notasi Big-omega untuk tiap fungsi berikut : 1. 6 n 3+12 n 2+1 2. 10 n 2+4 n+2

Tugas 1. Tentukan waktu yang dibutuhkan [T(n)] untuk tiap kinerja algoritma berikut dengan kecepatan

Tugas 1. Tentukan waktu yang dibutuhkan [T(n)] untuk tiap kinerja algoritma berikut dengan kecepatan PC sebesar 10 -15 untuk jumlah data berturut 90, 125, dan 150 : a. n b. n 3 c. n 2 2 n

Tugas • Tunjukkan bahwa T(n) = O(f(n)) dengan menemukan pasangan C dan n 0

Tugas • Tunjukkan bahwa T(n) = O(f(n)) dengan menemukan pasangan C dan n 0 sehingga T(n) ≤ C(f(n)). 1. T(n) = n 2/10+2 n = O(2 n) 2. T(n) = 6 n 2 + 2 n = O(2 n) 3. T(n) = 3 n 2+2 n+5 = O(n 2)

Pustaka • Brassad, Gilles & Paul Bratley, Algorithmics, Theory and Practice, Prentice Hall, 1988

Pustaka • Brassad, Gilles & Paul Bratley, Algorithmics, Theory and Practice, Prentice Hall, 1988 • Noah Smith, “Big-O, Analyzing Algorithms Asymptotically”. • Rinaldi Munir, Matematika Diskrit, Informatika Bandung, 2001 • Sartaj Sahni, Presentation L 2