Analisa Kompleksitas Algoritma Sunu Wibirama
Referensi Cormen, T.H., Leiserson, C.E., Rivest, R.L., Stein, C., Introduction to Algorithms 2nd Edition, Massachusetts: MIT Press, 2002 Sedgewick, R., Algorithms in C++ Part 1-4, Massachusetts: Addison-Wesley Publisher, 1998 Video lecture MIT Opencourseware ke-1: Introduction Video lecture IIT Kharagpur, India ke-18: Complexity of Algorithm
Video lecture MIT Opencourseware ke-1: Introduction Video lecture IIT Kharagpur, India ke-18: Complexity of Algorithm
Agenda Hari Ini Pentingnya Analisa Algoritma Prinsip Perbandingan Algoritma Dasar-dasar Matematika dan Teori Big-O Contoh Implementasi Kesimpulan
Apa yang pertama kali Anda menjadi pertimbangan Anda saat membeli komputer, selain PERFORMA? Kehandalan dalam menyelesaikan masalah (robustness) Fungsionalitas (functionality) Tampilan grafis (user interface) Daya tahan (reliability) Keamanan (security) Kesederhanaan (simplicity) Kemudahan dalam penggunaan (user friendly) Kemudahan dalam pemeliharaan (maintainability)
Algoritma dan Performa Hal-hal yang menjadi pertimbangan utama Anda tidak muncul dengan gratis Performa sistem menjadi alat tukar seperti uang. Algoritma program memegang peran kunci Algoritma adalah teknologi, engineered, sebagaimana perangkat keras komputer
Pentingnya Analisa Algoritma Algoritma membantu kita memahami skalabilitas program kita Performa terkadang menjadi pembeda antara yang mungkin dilakukan dan yang tidak mungkin dilakukan Analisa algoritma memberi gambaran informasi tentang perilaku program kita Mempelajari bagaimana menerapkan algoritma yang baik untuk kasus tertentu membedakan profesi system analyst dan programmer
Prinsip Perbandingan Algoritma Apa yang membuat sebuah algoritma dikatakan LEBIH BAIK dari algoritma yang lain? Kompleksitas waktu (Time Complexity) Kecenderungan saat ini: ruang (hard disk) semakin murah Kompleksitas ruang (Space Complexity) kapasitas data yang diproses semakin besar waktu pemrosesan harus semakin cepat Kompleksitas waktu menjadi variabel yang sangat penting
Penyebab variasi pada hasil analisa algoritma Program aras tinggi diterjemahkan ke bahasa mesin. Setiap tipe prosesor memiliki prosedur bahasa mesin yang berbeda Aplikasi dijalankan di shared environment, sehingga terpengaruh oleh penggunaan memori Program sangat sensitif terhadap masukan dan akan menunjukkan performa yang jauh berbeda untuk rentang masukan yang tidak terlalu berbeda Program tidak dipahami dengan baik, sehingga analisa matematika kurang merepresentasikan kondisi yang sesungguhnya Program tersebut memang tidak bisa dibandingkan dengan program yang lain karena hanya optimal untuk input-input tertentu
Hal-hal yang perlu diperhatikan pada analisa algoritma Memisahkan operasi pada tingkat abstraksi dan implementasi. Contoh: menghitung jumlah instruksi scanf pada program lebih diprioritaskan daripada memahami berapa nanoseconds instruksi scanf dieksekusi Mengidentifikasi data masukan: - Strategi average dan worst case - Strategi random dan biggest data
Dasar Matematika & Teori Big-O Sebagian besar algoritma memiliki parameter primer N yang sangat mempengaruhi waktu eksekusi Parameter N bisa berupa: - derajat polinomial - ukuran berkas (file) yang diproses - jumlah karakter pada text string - ukuran data yang diproses Pengukuran kompleksitas: Big-O
cg(n) Teori Big-O f (n) Teorema Matematika: n 0 n f (n) = O(g(n)) (b) O(g(N)) = { f (N) : jika terdapat konstanta positif c dan N 0, sehingga 0 f (N) cg(n) untuk semua N N 0 } Engineering: Hilangkan orde yang lebih rendah dan konstanta. Gunakan hanya orde tertinggi pada polinomial Contoh: 3n 3 + 90n 2 5n + 6046 = O(N 3 )
Macam-macam Parameter N 1 log N Sebagian besar instruksi dieksekusi satu kali atau dalam jumlah yang tidak terlalu banyak (waktu eksekusi konstan) Pertumbuhan waktu eksekusi program tidak terlalu cepat. Waktu eksekusi ini terdapat pada program yang memecahkan masalah dengan kapasitas yang cukup besar, dipecah-pecah menjadi beberapa bagian N Waktu eksekusi program linier. Sebagian besar masukan diproses dalam jumlah yang tidak terlalu banyak N log N Waktu eksekusi ini terdapat pada program yang memecahkan masalah menjadi beberapa bagian, menyelesaikannya secara terpisah, kemudian menggabungkannya kembali
Macam-macam Parameter N (cont d) N 2 Biasanya digunakan untuk memecahkan masalah dalam jumlah kecil. Biasanya terdapat pada program yang memproses pasangan data (quadratic) atau array dua dimensi secara bersamaan (double-nested loop) N 3 Biasanya digunakan untuk memecahkan masalah dalam jumlah kecil. Biasanya terdapat pada program yang memproses tiga buah data (cubic) atau array tiga dimensi secara bersamaan (triple-nested loop) 2 N Waktu eksekusi program linier. Sebagian besar masukan diproses dalam jumlah yang tidak terlalu banyak
Beberapa perbandingan kompleksitas algoritma O(N 2 ) Running Time (seconds) O(N!) O(N log N) O(N) O(1) O(log N) Figure 1-1: Comparison of different orders of complexity. Input size (N)
Formula Kondisi Periodik Sebagian besar algoritma terdiri dari proses penyelesaian masalah dengan memanfaatkan perulangan (rekursif) Bagian yang berulang tersebut secara tidak langsung berkontribusi pada kompleksitas sebuah algoritma Perlu mengetahui formula-formula dasar untuk kondisi periodik
Formula Kondisi Periodik Formula 1: kondisi periodik muncul pada program rekursif yang mengeliminasi satu item input Sedgewick, R., Algorithms in C++ Part 1-4, Massachusetts: Addison-Wesley Publisher, 1998
Formula Kondisi Periodik Formula 2: kondisi periodik muncul pada program rekursif yang membagi input menjadi dua bagian hanya dengan satu langkah Sedgewick, R., Algorithms in C++ Part 1-4, Massachusetts: Addison-Wesley Publisher, 1998
Formula Kondisi Periodik Formula 3: kondisi periodik muncul pada program rekursif yang membagi input menjadi dua bagian, namun perlu memeriksa tiap-tiap input Sedgewick, R., Algorithms in C++ Part 1-4, Massachusetts: Addison-Wesley Publisher, 1998
Formula Kondisi Periodik Formula 4: kondisi periodik muncul pada program rekursif yang mengolah input secara linear sebelum, pada saat, dan sesudah membagi input menjadi dua bagian Sedgewick, R., Algorithms in C++ Part 1-4, Massachusetts: Addison-Wesley Publisher, 1998
Formula Kondisi Periodik Formula 5: kondisi periodik muncul pada program rekursif yang membagi input menjadi dua bagian, kemudian mengerjakan input lain dengan kapasitas konstan Sedgewick, R., Algorithms in C++ Part 1-4, Massachusetts: Addison-Wesley Publisher, 1998
Jenis analisa waktu eksekusi Strategi Worst case (umum digunakan) T(N) = waktu eksekusi maksimum untuk jumlah data N Strategi Average case (jarang digunakan) T(N) = waktu yang diharapkan dari sebuah algoritma untuk mengeksekusi data sejumlah N. Perlu ada asumsi statistik untuk distribusi data masukan
Analisa worst case Biasanya mengambil batas maksimal (upper bound), untuk memberi jaminan bahwa program tidak akan terus berjalan saat batas maksimal waktu eksekusi tercapai Waktu eksekusi juga tergantung pada kondisi awal input : data yang sudah terproses akan lebih mudah dieksekusi daripada yang belum Untuk worst-case, diambil kemungkinan yang paling buruk (data tidak terproses sama sekali, pada kondisi yang berlawanan dengan kondisi akhir yang diharapkan)
Machine-independent Running Time Berapakah waktu eksekusi terburuk (worst-case) dari sebuah algoritma? Tergantung dari kecepatan mesin kita: - kecepatan relatif: berjalan di komputer yang sama - kecepatan absolut: berjalan di komputer yang berbeda Kita ingin mengukur kecepatan algoritma tanpa mempertimbangkan kecepatan komputer Analisa Asymptotic : Pertumbuhan waktu eksekusi T(N) saat N
Performa Asymptotic Pada jumlah data tertentu (> N0), algoritma dengan kompleksitas rendah O(n 2 ) bisa saja lebih efisien dibandingkan algoritma dengan kompleksitas tinggi Kita tidak boleh meremehkan sebuah algoritma yang secara asymptotic lebih lambat A2"3 O(n 2 ) O(n 3 ) Dalam disain riil, kita perlu menyeimbangkan proses engineering dengan melihat algoritma yang sesuai untuk masalah yang dihadapi " ", Analisa Asymptotic membantu kita untuk berlaku lebih adil terhadap algoritma yang kita gunakan
Teori Big-O Untuk membandingkan dua buah algoritma, bandingkan tingkat kompleksitasnya lim N f (N) g(n) Untuk N besar g(n) lebih efisien dari f(n) lim N f (N) g(n) 0 Untuk N besar f(n) lebih efisien dari g(n)
Implementasi: Insertion Sort!"#$%& 1"23"45"((? / *(? + *(6*(? " 78(43%&"'10 '$%#$%& #"'%3$9$:74((?A / B*?A + B*6B*?A " 135; $;9$((?A /?A + 6?A " 0 123*%)#4!"#$%& <((+((=((>((?((@ '$%#$%& +((?((=((@((<((> Cormen, T.H., Leiserson, C.E., Rivest, R.L., Stein, C., Introduction to Algorithms 2nd Edition, Massachusetts: MIT Press, 2002
Implementasi: Insertion Sort 1 + 2 3 4 5 2 + 3 1 4 5 + 1 2 3 4 5 + 1 2 3 4 5 + 2 1 3 4 5 + 1 2 3 4 5 + 2 1 3 4 5 + 5 3 2 4 1 + 4 2 1 3 5 + 4 2 5 1 3 &%"> + 3 2 4 1 5 Cormen, T.H., Leiserson, C.E., Rivest, R.L., Stein, C., Introduction to Algorithms 2nd Edition, Massachusetts: MIT Press, 2002
Implementasi: Insertion Sort A#B"C>DED>"F 12!3451627!645(8+*("9 +:/(0(0("; *(% A* + &( " +( ;>3* +:(A; )* A*B /,-'.$ )*C*, <=>(+:);(?(;>3 +( +:)D/;( +:); )* )*B / +:)D/;(@(;>3 +G / ) A " BD'$"> ;>3 Cormen, T.H., Leiserson, C.E., Rivest, R.L., Stein, C., Introduction to Algorithms 2nd Edition, Massachusetts: MIT Press, 2002
INSERTION-SORT(A) cost times 1 for j 2 to length[a] c 1 n 2 do key A[ j] c 2 n 1 3 Insert A[ j] intothesorted sequence A[1.. j 1]. 0 n 1 4 i j 1 c 4 n 1 5 while i > 0andA[i] > key c n 5 j=2 t j 6 do A[i + 1] A[i] c n 6 j=2 (t j 1) 7 i i 1 c n 7 j=2 (t j 1) 8 A[i + 1] key c 8 n 1 n T (n) = c 1 n + c 2 (n 1) + c 4 (n 1) + c 5 t j + c 6 n + c 7 (t j 1) + c 8 (n 1). j=2 j=2 n (t j 1) j=2 n j=2 j = n(n + 1) 2 and n ( j 1) = j=2 1 n(n 1) 2 ( ) n(n + 1) T (n) = c 1 n + c 2 (n 1) + c 4 (n 1) + c 5 1 2 ( ) ( ) n(n 1) n(n 1) + c 6 + c 7 + c 8 (n 1) 2 2 ( c5 = 2 + c 6 2 + c ) ( 7 n 2 + c 1 + c 2 + c 4 + c 5 2 2 c 6 2 c ) 7 2 + c 8 n (c 2 + c 4 + c 5 + c 8 ). + + O(n 2 )
Implementasi: Insertion Sort Worst-case (seluruh input diurutkan terbalik): N j =2 T (N) = O( j) = O(n 2 ) Deret aritmatika Apakah Insertion Sort algoritma yang cepat? - Ya, jika N kecil - Tidak, jika N besar Lihat perbandingannya dengan Merge Sort di slide berikutnya Cormen, T.H., Leiserson, C.E., Rivest, R.L., Stein, C., Introduction to Algorithms 2nd Edition, Massachusetts: MIT Press, 2002
Contoh komparasi Komputer A: Insertion Sort, lebih cepat untuk N kecil, memproses N data dengan waktu eksekusi Kecepatan eksekusi prosesor 10 9 instruksi/detik Komputer B: Merge Sort, lebih lambat untuk N kecil, memproses N data dengan waktu eksekusi c 1 N 2 Kecepatan eksekusi prosesor 10 7 instruksi/detik c 2 N log N Diketahui: c 1 c 2 Jika c1=2, c2=50, N = 10 6, mana algoritma yang lebih efisien?
Kesimpulan Analisa algoritma diperlukan untuk perbandingan algoritma tanpa tergantung spesifikasi mesin Analisa algoritma membantu kita memecahkan masalah sesuai kondisi dan data yang kita hadapi Analisa algoritma bukan alat mutlak untuk memilih algoritma terbaik, tapi membantu memahami perilaku algoritma saat diterapkan di dunia nyata
Terima Kasih