Kompleksitas Algoritma TINJAUAN PUSTAKA

Di dalam prakteknya hanya menghitung jumlah operasi khas tipikal yang mendasari suatu algoritma. Contoh operasi khas didalam algoritma yaitu : 1. Algoritma pencarian didalam larik Operasi khas : perbandingan elemen larik 2. Algoritma pengurutan Operasi khas : perbandingan elemen, pertukaran elemen 3. Algoritma penjumlahan 2 buah matriks Operasi khas : penjumlahan 4. Algoritma perkalian 2 buah matriks Operasi khas : perkalian dan penjumlahan Contoh : Algoritma menghitung rata – rata sebuah larik array sum  0 for i  1 to n do sum  sum + a[i] endfor rata_rata  sumn Operasi yang mendasar pada algoritma di atas adalah operasi penjumlahan elemen-elemen a i yaitu sum  sum + a[i] yang dilakukan sebanyak n kali dan mempunyai kompleksitas waktu yaitu Tn = n. Kompleksitas waktu dibedakan atas tiga macam yaitu : 1. T max n yaitu kompleksitas waktu untuk kasus terburuk worst case atau kebutuhan waktu maksimum. 2. T min n yaitu kompleksitas waktu untuk kasus terbaik best case atau kebutuhan waktu minimum. 3. T avg n yaitu kompleksitas waktu untuk kasus rata-rata average case atau kebutuhan waktu secara rata – rata. Contoh : Algoritma sequential search procedure PencarianBeruntuninput a1, a2, ..., an : integer, x : integer,output idx : integer Deklarasi k : integer ketemu : boolean Algoritm k  1 ketemu  false while k ≤ n and not ketemu do if ak = x then ketemu  true else k  k + 1 endif endwhile{ k n or ketemu } if ketemu then { x ditemukan } idx  k else idx  0 { x tidak ditemukan } endif Pada algoritma diatas maka dapat dihitung kompleksitas waktunya dengan menghitung jumlah operasi perbandingan yaitu : 1. Kasus terbaik terjadi apabila a 1 = x T min n = 1 2.5 2. Kasus terburuk terjadi apabila a n = x atau x tidak ditemukan. T max n = n 2.6 3. Kasus rata – rata terjadi jika x ditemukan pada posisi ke-j,maka operasi perbandingan a k = xakan dieksekusi sebanyak j kali. Tavgn = + + + … + � � + � + � � = � + 2.7

2.7 Notasi Big O

Notasi Big O merupakan suatu notasi matematika untuk menjelaskan batas atas dari magnitude suatu fungsi dalam fungsi yang lebih sederhana [8]. Dalam dunia ilmu komputer, notasi ini sering digunakan dalam analisis kompleksitas algoritma. Notasi Big O pertama kali diperkenalkan pakar teori bilangan Jerman, Paul Bachman tahun 1894 dalam bukunya yang berjudul Analytische Zahlentheorie edisi kedua[8]. Notasi tersebut kemudian dipopulerkan oleh pakar teori bilangan Jerman lainnya, Edmund Landau, dan oleh karena itu, terkadang disebut sebagai symbol Landau. Untuk membandingkan kompleksitas algoritma yang satu dengan yang lain, dapat digunakan tabel 2.3 yaitu tabel jenis kompleksitas yang diurutkan berdasarkan kompleksitas yang paling baik ke yang paling buruk. Sebuah masalah yang mempunyai algoritma dengan kompleksitas polinomial kasus terburuk dianggap mempunyai algoritma yang “bagus”, artinya masalah tersebut mempunyai algoritma yang mangkus, dengan catatan polinomial tersebut berderajat rendah. Jika polinomnya berderajat tinggi, waktu yang dibutuhkan untuk mengeksekusi algoritma tersebut panjang. Tabel 2.3 Jenis Kompleksitas Notasi Nama O1 Konstan Olog n Logaritmik On Linier On log n Linierithmik On 2 Kuadratik On 3 Kubik O2 n Eksponensial On Faktorial, kombinatorial Penjelasan masing – masing kelompok jenis kompleksitas algoritma adalah sebagai berikut : 1. O1 yaitu kompleksitas O1 berarti waktu pelaksanaan algoritma adalah tetap, tidak bergantung pada ukuran masukan. Contoh prosedur tukar dibawah ini : procedure tukarvar a:integer; var b:integer; var temp:integer; begin temp:=a; a:=b; b:=temp; end; Pada contoh kasus diatas jumlah operasi penugasan assignment ada tiga buah dan tiap operasi dilakukan satu kali. Jadi Tn = 3 = O1. 2. Olog n yaitu kompleksitas waktu logaritmik berarti laju pertumbuhan waktunya berjalan lebih lambat daripada pertumbuhan n. Algoritma yang termasuk kelompok ini adalah algoritma yang memecahkan persoalan besar dengan mentransformasikannya menjadi beberapa persoalan yang lebih kecil yang berukuran sama. Di sini basis algoritma tidak terlalu penting sebab bila n dinaikkan dua kali semula, misalnya, log n meningkat sebesar sejumlah tetapan. 3. On yaitu kompleksitas linier dimana waktu pelaksanaanya umumnya terdapat pada kasus yang setiap elemen masukanya dikenai proses yang sama. Bila n dinaikan dua kali semula. 4. On log n yaitu kompleksitas loglinier dimana waktu pelaksanaan yang n log n terdapat pada algoritma yang memecahkan persoalan menjadi beberapa persoalan yang lebih kecil, menyelesaikan tiap persoalan secara independen, dan menggabung solusi masing-masing persoalan. Algoritma yang diselesaikan dengan teknik bagi dan gabung mempunyai kompleksitas asimptotik jenis ini. Bila n = 1000, maka n log n mungkin 20.000. Bila n dijadikan dua kali semua, maka n log n menjadi dua kali semula tetapi tidak terlalu banyak. 5. On 2 yaitu kompleksitas kuadratik dimana waktu pelaksanaannya kuadratik hanya praktis digunakan untuk persoalan yang berukuran kecil. Umumnya algoritma yang termasuk kelompok ini memproses setiap masukan dalam dua buah perulangan bersarang. 6. On 3 yaitu kompleksitas kubik, seperti halnya algoritma kuadratik, algoritma kubik memproses setiap masukan dalam tiga buah perulangan bersarang. 7. O2 n yaitu kompleksitas eksponensial tergolong kelompok ini mencari solusi persoalan secara seperti algoritma Brute Force. Bila n = 20, waktu pelaksanaan algoritma adalah 1.000.000. Bila n dijadikan dua kali semula, waktu pelaksanaan menjadi kuadrat kali semula. 8. On yaitu kompleksitas faktorial. Seperti halnya pada algoritma eksponensial, algoritma jenis ini memproses setiap masukan dan menghubungkannya dengan n – 1. Bila n = 5, maka waktu pelaksanaan algoritma adalah 120. Bila n dijadikan dua kali semula, maka waktu pelaksanaan algoritma menjadi faktorial dari 2n. Gambar 2.3 Perbandingan kompleksitas algoritma Sebagai contoh terdapat suatu program sederhana yang akan dihitung komplesitasnya dengan menggunakan Big-O seperti : sum = 0; for i=0; in; i++ sum= sum +a[i] Kemudian pada tabel di bawah ini dapat dilihat perhitungan kompleksitas dengan menggunakan Big-O dari contoh program sederhana diatas : Tabel 2.4 Contoh Perhitungan Big-O dengan program sederhana Program Notasi Big-O Keterangan