Algoritma dan Struktur Data - Student...
Transcript of Algoritma dan Struktur Data - Student...
Click to edit Master subtitle style
Algoritma dan Struktur Data
Pertemuan 3 Pengantar Analisis Efisiensi Algoritma
Ø Efisiensi waktu seberapa cepat algoritma dieksekusi
Ø Efisiensi memori berapa banyak memori yang dibutuhkan untuk menjalankan algoritma
Analisa efisiensi algoritma bertujuan mengestimasi waktu dan memori yang dibutuhkan untuk mengeksekusi sebuah algoritma atau fungsi
Ukuran input banyaknya data input yang diolah oleh algoritmaContoh : ???
Faktor apa yang mempengaruhi efisiensi waktu sebuah algoritma?
Basic operation bagian dari algoritma yang yang dieksekusi berulang - ulang
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 xwhile i n and A[i] K do 2 x
i i + 1 1 xif i n return i 2 xelse return -1 1 x
Jelaskan isi algoritma di atas
Berapa ukuran input algoritma sequential search?
Ø Basic operation selalu merupakan bagian loop paling dalam. Mengapa???
Ø Bagian program non basic operation memberi tambahan sangat kecil pada waktu eksekusi program
Tunjukkan basic operationnya
i 0 1 xwhile i n and A[i] K do 2 x
i i + 1 1 xif i n return i 2 xelse return -1 1 x
Estimasikan waktu eksekusi algoritma sequential search!
Sequential Search
T(n) = estimasi waktu eksekusi algoritma untuk input berukuran n
T(n) = cop x C(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)
Pada kasus sequential search nilai C(n) tergantung dari posisi elemen yang akan dicari
Best-caseAnda 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-caseAnda sial. Nilai yang dicari ada di posisi terakhir array atau tidak ada di array. C(n) = n dan T(n) = n satuan waktu
Average-caseKasus paling umum. Nilai yang dicari bisa terletak di elemen mana saja dengan kemungkinan sama
Best Case, Worst Case, Average Case
Asumsikan 1. Data yang dicari memang ada pada array2. 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 = 12nd position = 2…….ith position = i…….nth position = n
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
Average Case
T(n) = (n+1)/2 satuan waktu
Ø 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)
Catatan
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Ø Untuk input data berukuran besar, algoritma dengan order of growth besar eksekusi waktunya jauh lebih lama dari algoritma dengan order of growth kecil
C constant, we write O(1)logN logarithmicN linearNlogNN2 quadraticN3 cubic2N exponentialN! factorial
f(n) Є O(g(n))
Cara membaca
“f(n) berada pada kelas g(n)”
The Big-Oh Notation
f(n) Є O(g(n)) Jika orders of growth f(n) kurang atau sama dengan(n).
C constant, we write O(1)logN logarithmicN linearNlogNN2 quadraticN3 cubic2N exponentialN! factorial
The Big-Oh Notation
N2 Є O(N2) paling presisiNlogN Є O(N2)N Є O(N2)log2N Є O(N2)logN Є O(N2)C Є O(N2)
Rinaldi M/IF2091 Strukdis 1919
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 2020
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 2121
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 2222
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 2323
Nilai masing-masing fungsi untuk setiap bermacam-macam nilai n
log n n n log n n2 n3 2n n! 0 1 0 1 1 2 1 1 2 2 4 8 4 2 2 4 8 16 64 16 24 3 9 24 64 512 256 362880 4 16 64 256 4096 65536 20922789888000 5 32 160 1024 32768 4294967296 (terlalu besar )