Algoritma dan Struktur Data Pertemuan 3 Pengantar Analisa Efisiensi Algoritma
Analisa efisiensi algoritma bertujuan mengestimasi waktu dan memori yang dibutuhkan untuk mengeksekusi sebuah algoritma atau fungsi Efisiensi waktu seberapa cepat algoritma dieksekusi Efisiensi memori berapa banyak memori yang dibutuhkan untuk menjalankan algoritma
Faktor apa yang mempengaruhi efisiensi waktu sebuah algoritma? Ukuran input banyaknya data input yang diolah oleh algoritma Contoh : ??? Basic operation bagian dari algoritma yang yang dieksekusi berulang - ulang
Jelaskan isi algoritma di atas Algorithm sequential search (A[0..n-1], K) // searches for a given value in a given array by sequential search // input: an array A[0..n-1] and a search key K // output: returns the index of the first element of A that matches K or -1 if there are no matching elements i 0 1 x while i n and A[i] K do 2 x i i + 1 1 x if i n return i 2 x else return -1 1 x Jelaskan isi algoritma di atas
Berapa ukuran input algoritma sequential search? Tunjukkan basic operationnya Basic operation selalu merupakan bagian loop paling dalam. Mengapa??? Bagian program non basic operation memberi tambahan sangat kecil pada waktu eksekusi program
Estimasikan waktu eksekusi algoritma sequential search! i 0 1 x while i n and A[i] K do 2 x i i + 1 1 x if i n return i 2 x else return -1 1 x Estimasikan waktu eksekusi algoritma sequential search!
T(n) = estimasi waktu eksekusi algoritma untuk input berukuran n T(n) = cop x C(n) T(n) = estimasi waktu eksekusi algoritma untuk input berukuran n Cop = waktu untuk mengeksekusi basic operation satu kali. Biasanya ditentukan 1 satuan waktu. Pada contoh sequential search, 1 satuan waktu kira - kira membutuhkan berapa clock CPU???
C(n) berapa kali basic operation dieksekusi untuk data berukuran n T(n) = cop x C(n) C(n) berapa kali basic operation dieksekusi untuk data berukuran n Pada kasus sequential search nilai C(n) tergantung dari posisi elemen yang akan dicari
Best Case, Worst Case, Average Case Anda beruntung. Nilai yang dicari ada pada posisi awal array. Setelah nilainya ditemukan, algoritma selesai dieksekusi. C(n) = 1 dan T(n) = 1 satuan waktu Worst-case Anda sial. Nilai yang dicari ada di posisi terakhir array atau tidak ada di array. C(n) = n dan T(n) = n satuan waktu Average-case Kasus paling umum. Nilai yang dicari bisa terletak di elemen mana saja dengan kemungkinan sama
Average Case Asumsikan Data yang dicari memang ada pada array Probabilitas data yang dicari terdapat di elemen tertentu sama besar untuk semua elemen array. Sehingga probabilitas sebuah data muncul pada elemen ke i adalah 1/n
Average Case Banyaknya eksekusi basic operation jika data yang dicari ada pada posisi 1st position = 1 2nd position = 2 ……. ith position = i nth position = n
T(n) = (n+1)/2 satuan waktu Average Case C(n) atau banyaknya eksekusi basic operation untuk data berukuran n 1(1/n) + 2 (1/n) + 3 (1/n) + …….. + i (1/n) + …… + n (p/n) = (1/n)(1 + 2 + 3 +… + n) = (1/n)(n(n+1))/2 = (n+1)/2 T(n) = (n+1)/2 satuan waktu
Catatan Tujuan utama mencari T(n) bukan mencari waktu eksak yang dibutuhkan untuk mengeksekusi sebuah algoritma Tetapi untuk mengetahui tingkat pertambahan waktu eksekusi algoritma jika ukuran input bertambah (order of growth)
Orders of Growth Tingkat pertambahan waktu eksekusi algoritma jika ukuran input bertambah
Orders of Growth Urutkan waktu eksekusi algoritma di bawah ini berdasarkan order of growthnya T1 (n) = n2 T1 (10) = 100 T1 (100) = 10,000 T2(n) = 2n T2(10) = 1,028 T2(100) = 1.3 x 030 T3(n) = n3 T3(10) = 1,000 T3(100) = 1,000,000 T4(n) = n T4(10) = 10 T4(100) = 100 T5(n) = log2 n T5(10) = 3.3 T5(100) = 6.6
Orders of Growth Makin ke bawah, order of growth makin besar C constant, we write O(1) logN logarithmic N linear NlogN N2 quadratic N3 cubic 2N exponential N! factorial Makin ke bawah, order of growth makin besar Untuk input data berukuran besar, algoritma dengan order of growth besar eksekusi waktunya jauh lebih lama dari algoritma dengan order of growth kecil
The Big-Oh Notation f(n) Є O(g(n)) Cara membaca “f(n) berada pada kelas g(n)” f(n) Є O(g(n)) Jika orders of growth f(n) kurang atau sama dengan(n).
The Big-Oh Notation C constant, we write O(1) logN logarithmic N linear NlogN N2 quadratic N3 cubic 2N exponential N! factorial N2 Є O(N2) paling presisi NlogN Є O(N2) N Є O(N2) log2N Є O(N2) logN Є O(N2) C Є O(N2)
O(1) Waktu pelaksanaan algoritma adalah tetap, tidak bergantung pada ukuran masukan. O(log n) Kompleksitas waktu logaritmik berarti laju pertumbuhan waktunya berjalan lebih lambat daripada pertumbuhan n. Rinaldi M/IF2091 Strukdis
O(n) Bila n dijadikan dua kali semula, maka waktu pelaksanaan algoritma juga dua kali semula. O(n log n) Bila n dijadikan dua kali semual, maka n log n menjadi lebih dari dua kali semula (tetapi tidak terlalu banyak) Rinaldi M/IF2091 Strukdis
O(n2) Bila n dinaikkan menjadi dua kali semula, maka waktu pelaksanaan algoritma meningkat menjadi empat kali semula. O(n3) Bila n dinaikkan menjadi dua kali semula, waktu pelaksanan algoritma meningkat menjadi delapan kali semula. Rinaldi M/IF2091 Strukdis
O(2n) Bila n dijadikan dua kali semula, waktu pelaksanaan menjadi kuadrat kali semula! O(n!) Bila n dijadikan dua kali semula, maka waktu pelaksanaan algoritma menjadi faktorial dari 2n. Rinaldi M/IF2091 Strukdis
Rinaldi M/IF2091 Strukdis
Tugas Implementasikan bubble sort dalam bahasa C Hitung T(n) untuk bubble sort Efisiensi waktu bubble sort berada pada kelas apa? Dikumpulkan dan dibahas pada pertemuan pertama setelah libur lebaran Tugas dipresentasikan oleh mahasiswa yang memiliki nomor urut mod 10 == 8