Kompleksitas Algoritma Adit Bahan Buku Pak Nanda
Kompleksitas Algoritma Adit Bahan Buku Pak Nanda
Kompleksitas Algoritma Adit Bahan Buku Pak Nanda
1. Pendahuluan
A. Defenisi Algpritma
Suatu masalah dapat mempunyai banyak
algoritma penyelesaian. Algoritma yang digunakan
tidak saja harus benar, namun juga harus efisien.
Efisiensi suatu algoritma dapat diukur dari waktu
eksekusi algoritma dan kebutuhan ruang memori.
Algoritma yang efisien adalah algoritma yang
meminimumkan kebutuhan waktu dan ruang.
Dengan menganalisis beberapa algoritma untuk
suatu masalah, dapat diidentifikasi satu algoritma
yang paling efisien. Besaran yang digunakan untuk
menjelaskan model pengukuran waktu dan ruang
ini adalah kompleksitas algoritma.
Kompleksitas dari suatu algoritma merupakan
ukuran seberapa banyak komputasi yang
dibutuhkan algoritma tersebut untuk
menyelesaikan masalah. Secara informal,
algoritma yang dapat menyelesaikan suatu
permasalahan dalam waktu yang singkat memiliki
kompleksitas yang rendah, sementara algoritma
yang membutuhkan waktu lama untuk
menyelesaikan masalahnya mempunyai
kompleksitas yang tinggi. Kompleksitas algoritma
terdiri dari dua macam yaitu Kompleksitas Waktu
dan Kompleksitas Ruang.
Kompleksitas waktu, dinyatakan oleh T(n),
diukur dari jumlah tahapan komputrasi yang
dibutuhkan untuk menjalankan algoritma sebagai
fungsi ukuran masukan n, dimana ukuran
masukan (n) merupakan jumlah data yang di
proses oleh sebuah algoritma. Sedangkan
kompleksitas ruang S(n), diukur dari memori yang
digunakan oleh struktur data yang terdapat di
dalam algoritma sebagai fungsi dari masukan n.
Dengan menggunakan kompleksitas waktu atau
kompleksitas ruang, dapat di tentukan laju
peningkatan waktu atau ruang yang diperlukan
algoritma, seiring dengan menigkatnya ukuran
masukan (n).
Kecenderungan saat ini, ruang (memori
utama) yang disediakan semakin besar yang
artinya kapasitas data yang diproses juga semakin
besar. Namun waktu yang diperlukan untuk
menjalankan suatu algoritma harus semakin
cepat. Karena kompleksitas waktu menjadi hal
yang sangat penting, maka analisis kompleksitas
algoritma deteksi tepi akan dilakukan terhadap
running time algoritma tersebut.
B. Notasi Asimptotik
Untuk nilai n cuup besar, bahkan tidak
terbatas, dilakukan analisis efisiensi asimptotik
dari suatu algoritma untuk menentukan
kompleksitas waktu yang sesuai atau disebut juga
kompleksitas waktu asimptotik. Notasi yang
digunakan untuk menentukan kompleksitas waktu
asimptotik dengan melihat waktu tempuh
(running time) algoritma adalah notasi asimptotik
(asimptotic notation). Notasi asimptotik
didefinisikan sebagai fungsi dengan domain
himpunan bilangan asli N = {0,1,2,...} (Comment et
at., 2009:43).
Kompleksitas waktu asimptotik terdiri atas
tiga macam. Pertama, Keadaan terbaik (best case)
dinotasikan dengan Ω(g(n)) (Big-Omega), Keadaan
rata rata (average case) dilambangkan dengan
notasi Ὁ(g(n)) (Big-Theta) dan keadaan terburuk
(worst case) dilambangkan dengan O(g(n)) (Big-O).
C. Notasi O (Big-O)
Notasi asimpotik O digunakan ketika hanya
diketahui batas atas asimpotik. O(g(n))
didefinisikan:
O(g(n)) = {f(n): terdapat konstanta positif c
dan n0 sehingga 0 ≤ f(n) ≤ cg(n) untuk setiap n ≥
n0 } (Cermen et al., 2009:47).
Pada gambar 3.3 ditunjukan bahwa untuk
semua nilai n pada tepat dan di sebelah kanan n0,
nilai fungsi f(n) berada tepat atau di bawah cg(n).
F(n) = O(g(n)) mengindikasikan bahwa f(n) adalah
anggota himpumam O(gn)).
Notasi O menyatakan running time dari suatu
algoritma untuk kemungkinan kasus terburuk. Notasi
O memiliki dari beberapa bentuk. Notasi 0 dapat
berupa salah satu bentuk maupun kombinasi dari
bentuk bentuk tersebut.
Bentuk O(1) memiliki arti bahwa algoritma
yang sedang dianalisi merupakan algoritma konstan.
Hal ini mengindikasikan bahwa running time
algoritma tersebut tetap, tidak bergantung pada n.
O(n) berarti bahwa algoritma tersebut
merupakan algoritma liniear, Artinya, bila n menjadi
2n maka running time algoritma akan menjadi dua
kali running time semula.
O(n2) berarti bahwa algoritma tersebut
merupakan algoritma kuadratik.Algoritma kuadratik
biasanya hanya digunakan untuk kasus dengan n
yang berukuran kecil. Sebab, bila n dinaikkan
menjadi dua kali semula, maka running time
algoritma akan menjadi empat kali semula.
O(n3) berarti bahwa algoritma tersebut
merupakan algoritma kubik. Pada algoritma kubik,
bila n dinaikkan menjadi dua kali semula, maka
running time algoritma akan menjadi delapan kali
semula.
Bentuk O(2n) berarti bahwa algoritma tersebut
merupakam algoritma eksponensial. Pada kasus ini,
bila n dinaikkan menjadi dua kali semula, maka
running time algoritma akan menjadi kuadrat kali
semula.
O(log n) berarti algoritma tersebut merupakan
algoritma logaritmik. Pada kasus ini, laju
pertumbuhan waktu lebih lambat dari pada
pertumbuhan n. Algoritma yang termasuk algoritma
lpgaritmik adalah algoritma yang memecahkan
persoalan besar dengan mentransformasikannya
menjadi beberapa persoalan yang elbih kecil dengan
ukuran sama. Basis algoritma tidak terlalu penting,
sebab bila misalkan n dinaikkan menjadi dua kali
semula,log n meningkat sebesar jumlah tatapan.
Bentuk O(n log n), terdapat pada algoritma
yang membagi persoalan menjadi beberapa
persoalan yang lebih kecil, menyelesaikan setiap
persoalan secara independen, kemudian
menggabungkan solusi masing masing persoalan.
Sedangkan O(n!) berarti bahwa algoritma
tersebut merupakan algoritma faktorial. Algoritma
jenis ini akan memproses setiap masukan dan
menggabungkannya dengan n-1 masukan lainnya.
Bila n menjadi dua kai semula, maka running time
algoritma akan menjadi faktorial dari 2n.
Dan
Pada kasus terburuk diperoleh running time
untuk algoritma pengurutan adalah :