Notasi Big O RIWAYAT PENDIDIKAN

2.4. Notasi Big O

Notasi Big O merupakan suatu notasi matematika untuk menjelaskan batas atas dari magnitude suatu fungsi dalam fungsi yang lebih sederhana. 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, pada bukunya yang berjudul Analytische Zahlentheorie edisi kedua. 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.1 yaitu tabel jenis kompleksitas, yang diurutkan berdasarkan kompleksitas yang paling baik ke yang paling buruk. Sebuah masalah yang mempunyai algoritma dengan kompleksitas po linomial 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 [20]. Tabel 2.1 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 persoalana 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. Berikut pada gambar 2.5 adalah beberapa 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 2.2 dibawah ini dapat dilihat perhitungan kompleksitas dengan menggunakan Big-O dari contoh program sederhana diatas : Tabel 2.2 Contoh Perhitungan Big-O dengan program sederhana Program Notasi Big-O Keterangan sum = 0 O1 Dieksekusi 1 Kali i=0 O1 Dieksekusi 1 Kali in ON Dieksekusi 1 Kali i++ ON Dieksekusi 1 Kali sum = sum +a[i] ON Dieksekusi 1 Kali Dari hasil tabel 2.2 di atas maka dapat dihitung hasil dari notasi Big-O adalah sebagai berikut : O1 + O1 + ON + ON + ON = 2+ 3N kali = ON Gambar 2.5 Perbandingan kompleksitas algoritma Jadi dari program sederhana di atas mempunyai hasil perhitungan dengan Big-O adalah ON jadi untuk waktu eksekusinya sebanding dengan jumlah data jika n=5 maka waktu eksekusinya pun 5.

2.5. Algoritma Knuth-Morris-Pratt