Algo2013-S1-Tugas01

13
1. PENGANTAR ALGORITMA Apa 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 (naïve) Dibutuhkan 2 pernyataan (statement) : 1. Perulangan (looping) untuk menelusuri indeks A 2. 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 = False 5. if A[indeks] = key

description

Tugas Algoritma 1

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.