CSG523/ Desain dan Analisis Algoritma Fundamentals of The Analysis of Algorithm Efficiency Intelligence, Computing, Multimedia (ICM)
Review Algoritma:urutan langkah-langkah untuk memecahkan suatu masalah CSG523/ Desain dan Analisis Algoritma
Definisi lain: Algoritma adalah deretan langkah-langkah komputasi yang mentransformasikan data masukan menjadi keluaran [COR92]. Algoritma adalah deretan instruksi yang jelas untuk memecahkan masalah, yaitu untuk memperoleh keluaran yang diinginkan dari suatu masukan dalam jumlah waktu yang terbatas. [LEV03]. Algoritma adalah prosedur komputasi yang terdefinisi dengan baik yang menggunakan beberapa nilai sebagai masukan dan menghasilkan beberapa nilai yang disebut keluaran. Jadi, algoritma adalah deretan langkah komputasi yang mentransformasikan masukan menjadi keluaran [COR89]. CSG523/ Desain dan Analisis Algoritma
Algoritma dapat ditulis dengan notasi: Notasi apapun dapat digunakan untuk menuliskan algoritma asalkan mudah dibaca dan dipahami. Algoritma dapat ditulis dengan notasi: 1. Bagan alir (flow chart) 2. Kalimat-kalimat deskriptif 3. Pseudo-code (gabungan antara bahasa alami dengan bahasa pemrograman) CSG523/ Desain dan Analisis Algoritma
Analisis Algoritma Sebuah algoritma tidak hanya harus benar, tetapi juga harus mangkus (efficient) Ukuran kemangkusan algoritma: waktu dan ruang memori (space). Algoritma yang mangkus: algoritma yang meminimumkan kebutuhan waktu dan ruang CSG523/ Desain dan Analisis Algoritma
Example a1 a2 a3 … an procedure HitungRerata(input a1, a2, ..., an : integer, output r : real) { Menghitung nilai rata-rata dari sekumpulan elemen larik integer a1, a2, ..., an. Nilai rata-rata akan disimpan di dalam peubah r. Masukan: a1, a2, ..., an Keluaran: r (nilai rata-rata) } Deklarasi k : integer jumlah : real Algoritma jumlah0 k1 while k n do jumlahjumlah + ak kk+1 endwhile { k > n } r jumlah/n { nilai rata-rata } Contoh: hitung rata-rata bilangan bulat Hitung waktu eksekusinya, kemudian cari basic operation-nya CSG523/ Desain dan Analisis Algoritma
The operations Assignment operation Addition operation (jumlah0, k1, jumlahjumlah+ak, kk+1, r jumlah/n) t1 = 1 + 1 + n + n + 1 = 3 + 2n Addition operation (jumlah+ak, k+1) t2 = n + n = 2n Division operation (jumlah/n) t3 = 1 Total running time: t = t1 + t2 + t3 = (3 + 2n)a + 2nb + c detik It can’t be accepted. Why?? CSG523/ Desain dan Analisis Algoritma
Alat ukur kemangkusan algoritma: 1. Kompleksitas waktu, T(n) 2. Kompleksitas ruang, S(n) n = ukuran masukan yang diproses oleh algoritma T(n) : jumlah operasi yang dilakukan untuk menjalankan sebuah algoritma sebagai fungsi dari ukuran masukan n. S(n): ruang memori yang dibutuhkan algoritma sebagai fungsi dari ukuran masukan n CSG523/ Desain dan Analisis Algoritma
Operasi yang dihitung hanyalah operasi dasar (basic operation) . Operasi dasar: operasi khas yang mendasari suatu algoritma atau memiliki kontribusi terbesar dalam kenaikan running time. Misalnya: - operasi perbandingan elemen pada algoritma pengurutan/pencarian - operasi penjumlahan dan perkalian pada algoritma perkalian matriks CSG523/ Desain dan Analisis Algoritma
Theoretical analysis of time efficiency T(n) ≈ copC(n) running time execution time for basic operation Number of times basic operation is executed input size Untuk kasus hitung rata-rata, basic operations nya apa? CSG523/ Desain dan Analisis Algoritma
Input size and basic operation examples Problem Input size measure Basic operation Search for key in list of n items Number of items in list n Key comparison Multiply two matrices of floating point numbers Dimensions of matrices Floating point multiplication Compute an n Graph problem #vertices and/or edges Visiting a vertex or traversing an edge regarding an point out that the input size measure is more properly measured by number of bits: b= ⌊log2 n⌋ + 1 Graph problems are mentioned here just to give me an opportunity to discuss them in general. Typically this will depend on graph representation and the specific problem. CSG523/ Desain dan Analisis Algoritma
The effect of input size CSG523/ Desain dan Analisis Algoritma
Order of growth Most important: Order of growth within a constant multiple as n→∞ Example: How much faster will algorithm run on computer that is twice as fast? How much longer does it take to solve problem of double input size? See table 2.1 Example: cn2 how much faster on twice as fast computer? (2) how much longer for 2n? (4) CSG523/ Desain dan Analisis Algoritma
Table 2.1 CSG523/ Desain dan Analisis Algoritma
Best-case, average-case, worst-case For some algorithms efficiency depends on type of input: Worst case: W(n) – maximum over inputs of size n Best case: B(n) – minimum over inputs of size n Average case: A(n) – “average” over inputs of size n Number of times the basic operation will be executed on typical input NOT the average of worst and best case Expected number of basic operations repetitions considered as a random variable under some assumption about the probability distribution of all possible inputs of size n CSG523/ Desain dan Analisis Algoritma
CSG523/ Desain dan Analisis Algoritma
Example: Sequential search Problem: Given a list of n elements and a search key K, find an element equal to K, if any. Algorithm: Scan the list and compare its successive elements with K until either a matching element is found (successful search) or the list is exhausted (unsuccessful search) CSG523/ Desain dan Analisis Algoritma
Pseudo-code procedure PencarianBeruntun(input a1, a2, ..., an : integer, x : integer, output idx : integer) Deklarasi k : integer ketemu : boolean { bernilai true jika x ditemukan atau false jika x tidak ditemukan } Algoritma: k1 ketemu false while (k n) and (not ketemu) do if ak = x then ketemutrue else k k + 1 endif endwhile { k > n or ketemu } if ketemu then { x ditemukan } idxk idx 0 { x tidak ditemukan } Bagaimana jika tidak menggunakan variabel boolean?? Harus cek seluruh array Kalau elemen array sudah terurut, bagaimana efisiensi dari sequential search? CSG523/ Desain dan Analisis Algoritma
Sequential search efficiency Best case if a1 = x Worst case if an = x or x can’t be found Average case if x at j-position, so comparison operation (ak = x) will be executed j time. CSG523/ Desain dan Analisis Algoritma
Types of formulas for basic operation count Exact formula e.g., C(n) = n(n-1)/2 Formula indicating order of growth with specific multiplicative constant e.g., C(n) ≈ 0.5 n2 Formula indicating order of growth with unknown multiplicative constant e.g., C(n) ≈ cn2 Maksudnya apa ya???? CSG523/ Desain dan Analisis Algoritma
MaxSearch procedure CariElemenTerbesar(input a1, a2, ..., an : integer, output maks : integer) { Mencari elemen terbesar dari sekumpulan elemen larik integer a1, a2, ..., an. Elemen terbesar akan disimpan di dalam maks. Masukan: a1, a2, ..., an Keluaran: maks (nilai terbesar) } Deklarasi k : integer Algoritma maksa1 k2 while k n do if ak > maks then maksak endif ii+1 endwhile { k > n } Basic operation: (A[i] > maks) Perlu variabel boolean kah? Harus mencari ke seluruh elemen kah? Bagaimana kalau di sort terlebih dahulu baru ambil elemen di index terbesar? Lebih efisien mana? - hitung dari basic operation yg dilakukan CSG523/ Desain dan Analisis Algoritma
procedure PencarianBiner(input a1, a2, ..., an : integer, x : integer, output idx : integer) Deklarasi i, j, mid : integer ketemu : boolean Algoritma i1 jn ketemufalse while (not ketemu) and ( i j) do mid (i+j) div 2 if amid = x then ketemu true else if amid < x then { cari di belahan kanan } imid + 1 else { cari di belahan kiri } jmid - 1; endif endwhile {ketemu or i > j } if ketemu then idxmid idx0 BinarySearch Jika elemen array terurut, binsearch memiliki efisiensi tinggi. Jika elemen array tidak terurut ??? 1. Kasus terbaik Tmin(n) = 1 2. Kasus terburuk: Tmax (n) = 2log n CSG523/ Desain dan Analisis Algoritma
Selection Sort procedure Urut(input/output a1, a2, ..., an : integer) Deklarasi i, j, imaks, temp : integer Algoritma for in downto 2 do { pass sebanyak n – 1 kali } imaks1 for j2 to i do if aj > aimaks then imaksj endif endfor { pertukarkan aimaks dengan ai } tempai aiaimaks aimakstemp (i) Jumlah operasi perbandingan elemen Untuk setiap pass ke-i, i = 1 jumlah perbandingan = n – 1 i = 2 jumlah perbandingan = n – 2 i = 3 jumlah perbandingan = n – 3 i = k jumlah perbandingan = n – k i = n – 1 jumlah perbandingan = 1 Jumlah seluruh operasi perbandingan elemen-elemen larik adalah T(n) = (n – 1) + (n – 2) + … + 1 = Ini adalah kompleksitas waktu untuk kasus terbaik dan terburuk, karena algoritma Bubble Sort tidak bergantung pada batasan apakah data masukannya sudah terurut atau acak. (ii) Jumlah operasi pertukaran Untuk setiap i dari 1 sampai n – 1, terjadi satu kali pertukaran elemen, sehingga jumlah operasi pertukaran seluruhnya adalah T(n) = n – 1. Jadi, algoritma pengurutan maksimum membutuhkan n(n – 1 )/2 buah operasi perbandingan elemen dan n – 1 buah operasi pertukaran. CSG523/ Desain dan Analisis Algoritma
Selection sort – the operations (i) Jumlah operasi perbandingan elemen Untuk setiap pass ke-i, i = 1 jumlah perbandingan = n – 1 i = 2 jumlah perbandingan = n – 2 i = 3 jumlah perbandingan = n – 3 i = k jumlah perbandingan = n – k i = n – 1 jumlah perbandingan = 1 Jumlah seluruh operasi perbandingan elemen-elemen larik adalah T(n) = (n – 1) + (n – 2) + … + 1 = Ini adalah kompleksitas waktu untuk kasus terbaik dan terburuk, karena algoritma SelectionSort tidak bergantung pada batasan apakah data masukannya sudah terurut atau acak. CSG523/ Desain dan Analisis Algoritma
Selection sort – the operations (ii) Jumlah operasi pertukaran Untuk setiap i dari 1 sampai n – 1, terjadi satu kali pertukaran elemen, sehingga jumlah operasi pertukaran seluruhnya adalah T(n) = n – 1. Jadi, algoritma pengurutan maksimum membutuhkan n(n – 1 )/2 buah operasi perbandingan elemen dan n – 1 buah operasi pertukaran. CSG523/ Desain dan Analisis Algoritma
How about: Matrix multiplication Maxsearch CSG523/ Desain dan Analisis Algoritma