Faktor analisa algoritma
Deskripsi Materi ini membahas Faktor analisa algoritma
Tujuan Instruksional Khusus (TIK) Menjelaskan faktor analisa algoritma Menjelaskan Running time dan penggunaan memory Menjelaskan Kompleksitas waktu Menjelaskan Best, worst dan average case
Faktor dalam analisa algoritma Di dalam menganalisa suatu algoritma, terdapat beberapa faktor yang selalu menjadi pertimbangan di dalam menentukan baik tidaknya suatu algoritma; yaitu: Efisiensi suatu algoritma di dalam penggunaan sumber daya suatu komputer; dalam hal ini menyangkut banyaknya memori (space), dan lamanya waktu komputasi yang diperlukan (running time). Correctness dari algoritmanya sendiri. Yakni apakah algoritma tersebut selalu menghasilkan hasil yang benar untuk semua input yang mungkin. Kompleksitas dari algoritma. Dalam hal ini, baik faktor efisiensi maupun faktor kesulitan dalam mengimplementasi algoritma tersebut menjadi pertimbangan yang utama.
Contoh terdapat 2 buah algoritma untuk menghitung xn
Algoritma POWER1( ) : sederhana dan langsung (murah) memerlukan (n-1) perkalian (lambat) sesuai untuk n berskala kecil. Algorimta POWER2( ) : lebih kompleks dan rekursif (mahal) memerlukan ( 2log n ) perkalian (cepat) sesuai untuk n berskala besar.
Running Time dan penggunaan memory Analisa terhadap efisiensi suatu algoritma lebih ditekankan pada banyaknya sumber daya yang diperlukan dan dinyatakan sebagai fungsi dari besarnya input algoritma tersebut. Sedangkan pada analisa terhadap kompleksitas lebih pada identifikasi terhadap operasi dasar dan berapa kali operasi dasar tersebut perlu dilakukan dalam suatu algoritma. Dalam hal ini yang perlu diingat adalah bahwa analisa kompleksitas tidak bergantung pada jenis komputer yang digunakan. Contoh: efisiensi dapat ditentukan oleh banyaknya memori (space) yang diperlukan dan/atau lamanya waktu komputasi (running time) yang dibutuhkan sesuai dengan besarnya input algoritma tersebut.
Catatan Space : yang diperlukan oleh suatu algoritma, ditentukan dari jumlah dan ukuran variabel dan struktur data yang digunakan: Running Time: ditentukan oleh banyaknya operasi dasar yang dilakukan selama proses. Space-Time Trade-off: dalam banyak hal, space dan time yang diperlukan suatu algoritma selalu bersifat tolak belakang: “makin berkurang space, maka makin bertambah waktu yang diperlukan, dan sebaliknya”. Contoh: POWER2( ) meskipun melakukan jumlah operasi perkalian yang lebih sedikit, tetapi bersifat rekursif yang memerlukan space besar.
Operasi operasi dasar Operasi-operasi dasar pada suatu algoritma adalah operasi yang waktu prosesnya dibatasi oleh (memiliki batas atas) suatu nilai konstan dan hanya bergantung pada implementasi yang digunakan. Pada analisa algoritma, lebih diperhatikan pada banyaknya operasi dasar yang dilakukan dari pada waktu sebenarnya yang diperlukan oleh masing-masing operasi dasar tersebut; dengan perkataan lain setiap operasi dasar dapat dilihat sebagai satu satuan biaya (unit cost).
Contoh Pada suatu array T yang terdiri dari n elemen, waktu yang diperlukan oleh operasi: x min{T[ i ] | 1 i n } akan bergantung pada besarnya nilai n . Hal tersebut dapat digambarkan oleh proses sbb.: x T[ 1 ]; for i 2 to n do if T[ i ] < x then x T[ i ];
Operasi dasar, Contoh Berikut ini beberapa contoh operasi dasar yang biasa digunakan sebagai ukuran kompleksitas suatu algoritma tertentu:
Wall-clock time Disini pengukuran suatu algoritma dihitung berdasarkan waktu nyata (dengan menggunakan stop-watch) untuk bermacam ukuran input. Karakteristik: Bergantung pada jenis mesin/komputer yang digunakan. Bergantung pada keahlian programmer yang mengimplementasikan. Bergantung pada bahasa pemrograman yang digunakan.
Time Complexity (Asymptotic Running Time Complexity) Pengukuran dilakukan berdasarkan waktu yang diperlukan pada setiap operasi dasar, dan mengalikan waktu tersebut sesuai dengan banyaknya operasi tersebut dilakukan pada saat algoritma dijalankan. Asumsi: algoritma mengandung sejumlah operasi dasar. setiap perintah/instruksi dalam algoritma dilakukan secara berurutan (tidak dapat dilakukan secara simultan untuk 2 instruksi atau lebih).
Contoh
dengan demikian dapat dikatakan bahwa running time algoritma POWER1( ) adalah: T(n) = t1 + t2 (n - 1) + t3 (n - 1) + t4 = ( t2 + t3 ).(n - 1) + ( t1 + t4 ) Analisa: Dari proses di atas tampak bahwa langkah 1 dan 4 yang memerlukan waktu ( t1 + t4 ) tidak dipengaruhi sama sekali oleh besarnya input n. Dengan demikian algoritma POWER1() hanya dipengaruhi secara dominan oleh ( t2 + t3 ).(n - 1) yang merupakan fungsi dari input n.
Running time
Analisa secara eksak adalah cukup sulit
Analisa kasus terburuk dan rata rata running time suatu algoritma ditentukan terutama oleh banyaknya operasi dasar yang dilakukan. running time juga dipengaruhi tidak hanya oleh ukuran besarnya input yang berbeda-beda, tetapi juga oleh urutan dari data inputnya.
Algoritma Insertion Sort Algoritma Selection Sort Contoh Algoritma Insertion Sort Algoritma Selection Sort Insertion ( T[1..n] ) Selection ( T[1..n] ) 1 for I 2 to n do for I 1 to n do 2 x T[I] min_j I ; min_x T[I] 3 j I - 1 for j ( I + 1 ) to n do 4 while j > 0 and x < T[j] do if T[j] < min_x then 5 T[j + 1] T[j] min_j j 6 j j - 1 min_x T[j] 7 T[j+ 1] x T[min_j] T[I] 8 end T[I] min_x 9
Bila diberikan 2 buah array, U = [ 1, 2, 3, 4, 5, 6 ] dan V = [ 6, 5, 4, 3, 2, 1 ], dan kita jalankan pada kedua algoritma di atas, maka dapat dilihat bahwa: Kedua algoritma di atas memerlukan waktu yang lebih lama pada V dari pada U. Pada kedua algoritma, V menyatakan kasus terburuk (worst case) yakni tidak ada lagi susunan array dengan ukuran yang sama, yang lebih lama running time-nya. Pada algoritma Selection, perbedaan antara proses untuk U dan V tidaklah terlalu signifikan.
Karakteristik : worst case Worst-case Analysis: lebih sesuai untuk algoritma yang memerlukan respon waktu yang kritis, seperti program pengendali pembangkit tenaga nuklir, dimana dijamin tidak ada running time algoritma tersebut yang melebihi worst-case-nya.
Karakteristik : average case Average-case Analysis: lebih sesuai untuk algoritma yang sering digunakan berulang-ulang pada input yang berbeda-beda. Meskipun demikian analisa ini lebih sulit ditentukan (karena harus mengetahui fungsi distribusi probabilitas yang sesuai untuk data-datanya.
Karakteristik : best case Best-case Analysis: kompleksitas ini mudah untuk ditentukan, namun tidak dapat digunakan untuk mengukur kinerja suatu algoritma, melainkan biasa digunakan sebagai batas bawah dari kompleksitas average-case.
Perbandingan kompleksitas pada Best, Average dan Worst vase Algoritma B(n) A(n) W(n) Tower of Hanoi 2n Linear Search 1 n Binary Search Log n Insertion Sort n2 Merge Sort n Log n Heap Sort Quick Sort
Algoritma Selection Sort t(n) Selection ( T[1..n] ) d 1 for I 2 to n do c 2 min_j I ; min_x T[I] 3 for j ( I + 1 ) to n do b 4 if T[j] < min_x then 5 min_j j a c + b + a(n-I) 6 min_x T[j] 7 T[min_j] T[I] 8 T[I] min_x 9 end
maka waktu yang diperlukan tidak akan lebih dari: yang dapat disederhanakan menjadi: (a/2).n2 + (b+c - a/2).n + (d-c-b). Waktu di atas menunjukkan bahwa, fungsi yang diperoleh didominasi oleh suku (a/2).n2. Sesuai dengan definisi big-Oh, kita dapat pilih f(n) = n2, c = a/2 dan n0 = 0, dapat dikatakan algoritma tersebut memiliki waktu dalam O(n2).
Analisa algoritma bentuk rekursi Suatu algoritma yang mengandung proses rekursif, biasanya lebih sulit untuk dianalisa. Berdasarkan pengalaman dan intuisi, analisa dapat dilakukan dengan cara: lakukan bentuk rekursif tersebut dengan beberapa kali langkah awal. tentukan pola pengulangannya berdasarkan langkah rekursif awal tersebut. tebaklah formula umumnya. ujilah formula umum tersebut dengan cara induksi matematika.
barisan Fibonacci 0, 1, 1, 2, 3, 5, 8, 13, ... dapat analisa sebagai berikut bentuk rekursif 0, 1, 1, 2, 3, ... pola pengulangan: suku baru = jumlah dua suku sebelumnya formula umum: sn = sn-1 + sn-2, dengan kondisi awal: s0 =0 dan s1=1. (buktikan) dengan induksi matematik, bahwa bentuk (3) adalah benar.
Bentuk rekursif Untuk bentuk-bentuk rekursif tertentu, terdapat beberapa teknik yang dapat digunakan langsung di dalam menentukan kelas dari bentuk rekursif tersebut; antara lain: Bentuk rekursi linier homogen Bentuk rekursi linier inhomogen
Next Menyelesaikan bentuk rekursif dengan relasi rekurens
Moral Of The Story Bahkan teknik programming yang terbaik tak akan dapat membuat sebuah algoritma yang tidak efisien menjadi cepat. Sebelum kita menginvestasikan waktu untuk mencoba mengoptimisasi program, kita harus pastikan algoritma nya sudah yang paling efisien.
Latihan Dengan algoritma rekursif tersebut dalam pelajaran di atas, tentukan Power2(2,1) Power2(3,4) Power2(2,5)