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