Algo2013-S1-Tugas01
-
Upload
nuralifbahmid -
Category
Documents
-
view
216 -
download
4
description
Transcript of Algo2013-S1-Tugas01
1. PENGANTAR ALGORITMAApa sih algoritma itu ? Algoritma yaitu prosedur komputasional yang membutuhkan nilai sebagai input dan menghasilkan nilai output. Alat bantu menyelesaikan masalah komputasional Metode penyelesaian yang logis dan wajib benar.
Ada beberapa desain dan analisis data : Pseudocode Kompleksitas algoritma Strategi algoritma Struktur data Masalah NP-lengkap
Contoh masalah komputasional Masalah pencarian data Algoritma Linear Searching (nave)Dibutuhkan 2 pernyataan (statement) :1. Perulangan (looping) untuk menelusuri indeks A2. Penyeleksian syarat (selection condition) untuk membandingkan key dengan unsur dari indeks yang ditelusuri.Linear-Search(A, key)1. indeks 1;2. ada False; 3. Mengecek key dalam A[1.. length[A]] 4. while indeks length[A] and ada = False5. if A[indeks] = key6. then ada = True;7. indeks indeks + 1; 8. if ada = False9. then indeks length[A] + 1;10. return indeks Contoh masalah Linear-Search(A, key) :273615231
A = dengan key = 7
Algoritmanya :1. Indeks 22. Ada false3. While 1 length (5) and ada = false4. If A[1] = 36 false5. While 2 length (5) and ada = false6. If A[2] = 36 true7. While 3 length (5) and ada = true
Loop Invariant dan Correctness Inisialisasi (initialization) Pemeliharaan (maintenance) Penghentian (termination)
Contoh masalah pengurutan data (Sorting Problem) Input: Barisan n bilangan (a1, a2, , an) Output: Permutasi barisan bilangan sedemikian sehingga terurut kembali kedalam barisan bilangan (a1, a2, , an), dimana a1 a2 anAlgoritma Insertion-Sort1. for j 2 to length [A]2. key A[j]3. sisip A[j] ke dalam barisan terurut A[1 ... j-1]4. i j -15. while (i>0 A[i] > key6. A[i + 1] A[i]7. i i 18. A[i + 1] key
Contoh Insertion-Sort:Urutkan data berikut dari terkecil ke terbesar : 2736152
Algoritmanya:for j 2 to length [4]key A[2]key 36i j 1 = 2 1 = 1while (1>0 A[1] > key)A[i + 1] keyA[1 + 1] keyA[2] = 362736152
for j 3 to length [4]key A[3]key 15i j 1 = 3 1 = 2while (2>0 A[2] > key)A[i + 1] A[i]A[2 + 1] A[2]A[3] = 362736362
i i 1 = 2 1 = 1while (1>0 A[1] > key)A[i + 1] A[i]A[1 + 1] A[1]A[2] = 272727362
i i 1 = 1 1 = 0while (0>0 A[0] > key)A[i + 1] keyA[0 + 1] keyA[1] = 151527362
for j 4 to length [4]key A[4]key 2i j 1 = 4 1 = 3while (3>0 A[3] > key)A[i + 1] A[i]A[3 + 1] A[3]A[4] = 3615273636
i i 1 = 3 1 = 2while (2>0 A[2] > key)A[i + 1] A[i]A[2 + 1] A[2]A[3] = 2715272736
i i 1 = 2 1 = 1while (1>0 A[1] > key)A[i + 1] A[i]A[1 + 1] A[1]A[2] = 1515152736
i i 1 = 1 1 = 0while (0>0 A[0] > key)A[i + 1] keyA[0 + 1] keyA[1] = 22152736
costtimesc1n c2n 1 0n 1 c4n 1 c5c6c7c8n 1 Analisis Algoritma Insertion-Sort(A)1. for j 2 to length [A]2. key A[j]3. sisip A[j] ke dalam barisan terurut A[1 ... j-1]4. i j -15. while (i>0 A[i] > key6. A[i + 1] A[i]7. i i 18. A[i + 1] key
Total waktu komputasi atau running time T(n):
Waktu komputasi tidak hanya tergantung pada jumlah data, tetapi juga tergantung pada bagaimana barisan input data Kasus terbaik (best case): Input data telah terurut, tj = 1 Kasus terburuk (worst case): Input data terurut terbalik, tj = j
2. PERANCANGAN ALGORITMAMasalah pencarian data Searching ProblemInput : Barisan n bilangan asli (a1,a2,,an) dalam larik A dan bilangan key.Output : Lokasi key dalam A.
Times1n + 1n 1s s Pencarian Linear (Nave) Linear-Search(A, key)1ada False 2for i 1 to length[A] 3if A[i] = key then 4posisi i 5ada True6if not(ada) then 7posisi length[A] + 18A[posisi] data
Program dapat di tuliskan seperti berikut:
Dimana,:2n di dapat dengan melihat jumlah n.
Dikali 2 karena terdapat dua 2s karena s = jumlah kali program dieksekusi,karena terdapat dua s, maka jumlah kali program dieksekusi dikalikan 2.Pada program terdapat 3 angka 1 yang menandakn bahwa pada bagian tersebut program hanya berjalan 1 kali, kecuali pada n+1, dimana satu kali eksekusi akan bertambah terus hingga memperoleh nilai true. Kasus Terburuk: Semua unsur dalam larik A sama dengan key. (Dalam hal ini, dan s = 0)
Dengan kata lain ketika nilai tidak ada dalam daftar atau terjadi hanya sekali pada akhir daftar, di mana kasus nperbandingandiperlukan. Kasus Terbaik: Tidak terdapat satu pun unsur dalam larik A sama dengan key. (Dalam hal ini, dan s = 1)
Ketika nilai sama dengan elemen pertama dari daftar, dalam hal ini hanya satu perbandingan yang dibutuhkan.
costtimesc11c2 n + 1c3 n c4 c5c6 nc7c8c91qc10s c11s Pencarian Biseksi (Bagi-dua) Bisection-Search(A, key)1ada False 2for i 1 to length[A] /2 3if A[i] = key then 4posisi i 5ada True6if A[n i + 1] = key then 7posisi n i + 1 8ada True9if not(ada) then 10posisi length[A] + 111A[posisi] data
Pencarian Biseksi (Bagi-dua) adalah algoritmapencarian akar yang membagi duaselang, lalu memilih bagian selang yang berisi akar seharusnya berada untuk diproses lebih lanjut. Metode ini sangat sederhana dan tangguh, tapi juga sangat lambat.
Binary Search Tree (BST)Binary Search Tree (BST) adalah sebuah pohon biner yang boleh kosong, dan setiap nodenya harus memiliki identifier/value. value pada semua node subpohon sebelah kiri adalah selalu lebih kecil dari value dari root, sedangkan value subpohon di sebelah kanan adalah sama atau lebih besar dari value pada root, masing masing subpohon tersebut (kiri&kanan) itu sendiri adalah juga bst. Contohnya:
Indeks1234567
Kiri246
Kanan357
Nilai23212520222426
Jadi kesimpulannyasimpul.kiri < root < simpul.kanan
3. KOMPLEKSITAS ALGORITMAKompleksitas Algoritma Kompleksitas Algoritma : Perubahan laju pertumbuhan input terhadap perubahan/penambahan output (Masalah pencarian: Laju pertumbuhan running time T(n) terhadap penambahan jumlah data n) Cara mengetahui fungsi kompleksitas algoritma jika baris instruksi sangat banyak yaitu dengan plot grafik kompleksitas algoritma terhadap penambahan output, kemudian dekati dengan sebuah fungsi.
Batas Atas (Upper Bound)
Dari gambar diatas, didapat bahwa bila kompleksitas suatu algoritma T(n) = f(n), maka T(n) = O(g(n)) jika terdapat bilangan positif konstan c dan n0 sehingga memenuhi persamaan : 0 < f(n) < c.g(n) untuk semua n > n0. Dalam hal ini, g(n) merupakan batas atas asimptotik dari fungsi f(n) (= T(n)). Notasi-O ini hanya membatasi fungsi dari atas, yang memiliki arti bahwa fungsi f(n) tersebut tidak akan lebih besar dari g(n) tanpa mengetahui seberapa rapat g(n) dengan f(n).
Batas Bawah (Lower Bound)
Dari gambar di atas, didapat bahwa bila kompleksitas suatu algoritma T(n) = f(n), maka T(n) = (g(n)) jika terdapat bilangan positif konstan c dan n0 sehingga memenuhi persamaan : 0 < c.g(n) < f(n) untuk semua n > n0. Dalam hal ini, g(n) merupakan batas bawah asimptotik dari fungsi f(n) (= T(n)). Notasi- ini hanya membatasi fungsi dari bawah, yang memiliki arti bahwa fungsi f(n) tersebut tidak akan lebih kecil dari g(n) tanpa mengetahui seberapa rapat g(n) dengan f(n).
Batas Ketat (Tight Bound)
Dari gambar diatas, didapat bahwa bila kompleksitas suatu algoritma T(n) = f(n), maka T(n) = (g(n)) jika terdapat bilangan positif konstan c1, c2, dan n0 sehingga memenuhi persamaan : 0 < c1.g(n) < f(n) < c2.g(n), untuk semua n > n0. Dalam hal ini, g(n) merupakan batas rapat (batas atas maupun batas bawah) asimptotik untuk fungsi f(n) (=T(n)). Notasi- membatasi fungsi dari atas maupun bawah, yang berarti bahwa kompleksitas waktu tersebut sebanding dengan fungsi g(n). Notasi- hanya didapat jika dan hanya jika T(n) = O(g(n)) dan T(n) = (g(n)). Pada kontes pemrograman, seringkali yang dipakai adalah notasi-O daripada notasi- ini. Hal ini disebabkan karena mayoritas hanya memperhitungkan kasus terburuk saja untuk mengkalkulasi waktu program.