Analisis Efisiensi Algoritma Oleh:
Jurusan Teknik Informatika – Fakultas Sains dan Teknologi Teknologi – UIN Sunan Gunung Djati Bandung – Semester Genap Tahun Akademik 2015/2016
▪
▪
▪
▪
▪
Analisiss Efisiensi Analisi Efisiensi Algoritma Algoritma Worst-case, Best-case, dan Worst-case, Average-case Notasi Asimtotik dan Kelas Efisiensi Analisis Matematika Analisis Matematika Algoritma Algoritma Non-rekursif Analisis Matematika Analisis Matematika Algoritma Algoritma Rekursif
Analisis Efisiensi Efisiensi Algoritma Algorit ma
Analisis Efisiensi Algoritma ▪
▪
▪
Analisis algoritma dalam arti sempit merupa m erupakan kan penyelidikan terhadap efisiensi algoritma berdasarkan berdasarkan 2 hal: efisiensi waktu dan efisiensi ruang. Efisiensi waktu (time efficiency) yang disebut juga dengan kompleksitas waktu (time complexity), menunjukkan complexity), menunjukkan seberapa cepat dalam menjalankan algoritma. Efisiensi ruang (space efficiency) yang disebut juga dengan kompleksitas ruang (space efficiency), menunjukkan efficiency), menunjukkan banyaknya memori yang diperlukan diperlukan oleh algoritma.
Ukuran Input dan Waktu Komputasi ▪
Hampir semua algoritma mempunyai waktu komputasi lebih lama untuk input yang lebih besar/lebih banyak. Efisiensi algoritma dapat diukur berdasarkan fungsi dengan parameter yang menunjukkan ukuran input atau besarnya input.
▪
▪
Mengukur waktu komputasi sebuah algoritma dapat mengalami beberapa kendala: bergantung pada kecepatan komputer, bergantung pada kualitas program yang menjalankan algoritma dan kompiler yang digunakan untuk menghasilkan kode mesin, serta kesulitan mengambil waktu komputasi dari program. Salah satu pendekatan yang mungkin adalah menghitung banyaknya operasi dasar (basic operation) yang dilakukan oleh algoritma tersebut.
Operasi Dasar ▪
▪
▪
Operasi dasar merupakan operasi yang paling banyak dijalankan oleh algoritma. Misalnya untuk algoritma sorting, operasi dasar yang paling banyak digunakan adalah membandingkan elemen-elemen yang akan diurutkan. Untuk operasi dasar aritmatika, operasi yang paling lama waktu komputasinya yaitu pembagian, diikuti dengan perkalian, penjumlahan, dan pengurangan.
Misalnya adalah waktu eksekusi untuk sebuah operasi dasar pada sebuah komputer dan adalah banyaknya operasi yang dibutuhkan, maka waktu komputasi adalah Catatan:
() () ≈
() tidak memuat operasi yang bukan operasi dasar.
Contoh Misalkan banyaknya operasi dasar yang dibutuhkan oleh sebuah algoritma adalah
( 1). Jika ukuran input diperbesar 2
kali lipat, berapa kali lebih lama waktu yang dibutuhkan? Jawab:
21 1 21 12 ≈ 21 1 2 ≈ 2 ≈ 2 2 4 1 2
Maka
Waktu komputasi yang dibutuhkan 4 kali lebih lama dibandingkan ukuran input .
Worst-case, Best-case, dan Average-case ▪
▪
▪
Efisiensi worst-case dari sebuah algoritma adalah efisiensi untuk kondisi terburuk dari input berukuran yang menghasilkan waktu komputasi terlama dibandingkan input-input yang lain.
Efisiensi best-case dari sebuah algoritma adalah efisiensi untuk kondisi terbaik dari input berukuran yang menghasilkan waktu komputasi tercepat dibandingkan input-input yang lain.
Efisiensi average-case dari sebuah algoritma adalah efisiensi untuk kondisi rata-rata dari sembarang input yang menghasilkan waktu komputasi rata-rata.
Contoh: Sequenial Search Perhatikan algoritma sequential search berikut:
Contoh: Sequential Search ▪
▪
▪
,
Worst-case untuk algoritma sequential search adalah yaitu terjadi pada saat pencarian tidak ditemukan atau pencarian ditemukan pada data terakhir.
1
Best-case untuk algoritma sequential search adalah , yaitu terjadi pada saat pencarian ditemukan pada data pertama. Average-case untuk algoritma sequential search adalah
di mana adalah peluang pencarian berhasil dengan
0 ≤ ≤ 1.
Resume Kerangka Analisis ▪
▪
▪
Efisiensi waktu dan ruang diukur dengan membuat fungsi dari ukuran input. Efisiensi waktu diukur dengan menghitung banyaknya operasi dasar dilakukan. Efisiensi ruang diukur dengan menghitung banyaknya memori tambahan yang diperlukan algoritma. Untuk mengukur efisiensi beberapa algoritma, dapat dilakukan dengan melakukan analisis worst-case, best-case, dan average-case.
Notasi Asimtotik dan Kelas Efisiensi ▪
Untuk membandingkan efisiensi operasi dasar dari beberapa algoritma, dapat menggunakan beberapa notasi: (dibaca: “big oh”), (dibaca: “big omega”), dan (dibaca: “big theta”).
Ω
▪
▪
▪
▪
()
()
Θ
Misalkan terdapat dan yang merupakan fungsi non-negatif pada himpunan bilangan asli, di mana menunjukkan waktu komputasi (biasanya ditandai dengan jumlah operasi dasar ) dan menunjukkan fungsi sederhana sebagai pembanding.
()
() adalah himpunan semua fungsi yang lebih kecil atau sama dengan (). Ω adalah himpunan semua fungsi yang lebih besar atau sama dengan (). Θ adalah himpunan semua fungsi yang mempunyai orde yang sama dengan ()
Contoh ▪
Notasi
▪
Notasi
Ω
Notasi-
Definisi
() ()
( )
∈ ( ) () untuk semua ≥
Fungsi disebut anggota , dinotasikan dengan , jika terbatas ke atas oleh beberapa kelipatan konstanta positif dari untuk semua yang besar, yaitu terdapat beberapa konstanta positif dan beberapa bilangan bulat non-negatif sedemikian sehingga
≤ ()
Contoh Buktikan dengan
100 + 5 ∈
101 dan 5.
Boleh juga dengan
105 dan 1.
Notasi-
Definisi
()
Ω( )
∈ Ω( ) () untuk semua ≥
Fungsi disebut anggota , dinotasikan dengan , jika terbatas ke bawah oleh beberapa kelipatan konstanta positif dari untuk semua yang besar, yaitu terdapat beberapa konstanta positif dan beberapa bilangan bulat non-negatif sedemikian sehingga
()
≥ ()
Contoh Buktikan dengan
3 ∈ Ω()
1 dan 0.
Notasi-
Definisi
() Θ( ) () () ≤ ≤ ()
∈ Θ( )
Fungsi disebut anggota , dinotasikan dengan , jika terbatas ke atas dan ke bawah oleh beberapa kelipatan konstanta positif dari untuk semua yang besar, yaitu terdapat beberapa konstanta positif dan serta beberapa bilangan bulat non-negatif sedemikian sehingga Contoh
1
∈ Θ Bukti ruas kanan: ( 1/2) Buktikan
Bukti ruas kiri:
( 1/4, 2)
untuk semua
≥
Analisis Matematika Algoritma Non-rekursif Contoh 1
> dengan − 1 1 ∈ Θ()
Operasi dasarnya adalah pengecekkan kondisi
=
Analisis Efisiensi Waktu Algoritma Non-rekursif Langkah-langkah: 1. Tentukan parameter yang menunjukkan ukuran input 2. Identifikasi mana operasi dasar algoritma (biasanya terdapat pada pengulangan yang paling dalam) 3. Cek apakah banyaknya operasi dasar yang dilakukan hanya bergantung pada ukuran input atau tidak. Jika ia juga bergantung pada kondisi yang lain, selidiki worst-case, average-case, dan jika perlu best-case dari algoritma tersebut 4. Tuliskan banyaknya operasi dasar yang dilakukan dalam bentuk sigma 5. Dengan menggunakan formula dan aturan standar sigma, cari formulanya
Rumus-rumus Sigma
Aturan-aturan Sigma
Analisis Matematika Algoritma Non-rekursif Contoh 2
[]
Operasi dasarnya adalah pengecekkan kondisi . Pada algoritma di atas, banyaknya membandingkan tidak hanya bergantung pada , tetapi juga pada kondisi apakah elemennya sama atau tidak. Kita batasi penyelidikan hanya untuk worst-case.
Analisis Matematika Algoritma Non-rekursif Ada 2 jenis input worst-case, yaitu input di mana algoritma tidak menemukan elemen yang sama dan kondisi di mana elemen yang sama ditemukan di indeks terakhir. Maka
Kita juga dapat menghitung dengan cepat
Analisis Matematika Algoritma Non-rekursif Contoh 3
Terdapat dua operasi dasar pada pengulangan yang paling dalam yaitu perkalian dan penjumlahan. Kita pilih operasi perkalian sebagai operasi dasar karena memiliki waktu komputasi lebih lama dibandingkan penjumlahan.
Analisis Matematika Algoritma Non-rekursif Misal, total banyaknya perkalian adalah
(). Maka
dapat dihitung menjadi
Kita dapat mengestimasi waktu komputasi algoritma pada mesin tertentu adalah
di mana adalah waktu komputasi untuk satu kali operasi perkalian. Kita dapat menghitung waktu komputasi yang lebih akurat dengan cara di mana
adalah waktu komputasi untuk satu kali operasi penjumlahan.
Latihan 1 Perhatikan algoritma berikut!
a. Jelaskan apa yang dikerjakan algoritma di atas? b. Apa operasi dasarnya? c. Tentukan
() dari operasi dasar dan kelas efisiensinya!
Latihan 2 Perhatikan algoritma berikut!
a. Jelaskan apa yang dikerjakan algoritma di atas? b. Apa operasi dasarnya? c. Tentukan
() dari operasi dasar dan kelas efisiensinya!
Latihan 3 Perhatikan algoritma berikut!
a. Jelaskan apa yang dikerjakan algoritma di atas? b. Apa operasi dasarnya? c. Tentukan
() dari operasi dasar dan kelas efisiensinya!
Analisis Matematika Algoritma Rekursif Contoh
! Untuk sembarang bilangan bulat non-negatif ! 1 ⋅ …⋅ 1 ⋅ 1 ! ⋅ dan 0! 1, kita dapat menghitung 1 ⋅ dengan algoritma Hitung fungsi faktorial . Karena
rekursif berikut:
Operasi dasar algoritma di atas adalah perkalian
1 ∗ .
Analisis Matematika Algoritma Rekursif
()
Misal adalah banyaknya operasi dasar yang dilakukan. Karena fungsi dihitung berdasarkan formula
()
1 ⋅ untuk > 0, banyaknya perkalian yang dilakukan () harus memenuhi persamaan ()
Persamaan di atas tidak menghitung secara eksplisit, tapi secara implisit merupakan sebuah fungsi yang nilainya bergantung pada titik yang lain, yaitu . Persamaan seperti ini disebut dengan recurrence relations .
1
Analisis Matematika Algoritma Rekursif Algoritma akan berhenti melakukan rekursif ketika . Pertama, pemanggilan rekursif berhenti ketika , yang merupakan nilai terkecil dari di mana algoritma dieksekusi dan oleh karena itu . Kedua, ketika algoritma tidak melakukan perkalian. Oleh karena itu, kondisi awalnya:
0
0
0
Maka kita dapat tulis recurrence relation kondisi awalnya menjadi
dengan fungsi faktorial
Analisis Matematika Algoritma Rekursif Dengan menggunakan metode substitusi balik, kita dapatkan
Dari uraian di atas, kita bisa dapatkan sebuah pola
+ . Jika kita substitusikan kondisi awal untuk 0, kita substitusikan ke persamaan pola di atas menjadi
Artinya, banyaknya operasi perkalian yang dilakukan adalah
.
Any Question?
Referensi Anany Levitin. 2012. Introduction to the Design and Analysis of Algorithms. 3rd Edition.