analisis algoritma

22
Modul 4 : Analisis Algoritma & Struktur Data

Upload: galvin-cohen

Post on 30-Dec-2015

114 views

Category:

Documents


1 download

DESCRIPTION

Analisis Algoritma. Modul 4 : Analisis Algoritma & Struktur Data. Analisis Algoritma. ilmu yang digunakan untuk mengetahui ukuran “kerumitan” (complexity) dari suatu algoritma sehingga dapat diketahui apakah suatu algoritma cukup efisien bila di-implementasi-kan. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Analisis Algoritma

Modul 4 : Analisis Algoritma & Struktur Data

Page 2: Analisis Algoritma

ilmu yang digunakan untuk mengetahui ukuran “kerumitan” (complexity) dari suatu algoritma sehingga dapat diketahui apakah suatu algoritma cukup efisien bila di-implementasi-kan.

Suatu ukuran kerumitan yang sering digunakan adalah asymptotic time complexity, kerumitan waktu asimptotik, suatu ukuran yang menunjukkan perkembangan waktu proses sesuai dengan pertambahan jumlah data input.

Page 3: Analisis Algoritma

andaikan suatu algoritma memerlukan waktu yang berbanding dengan kuadrat dari jumlah data, T=O(n2), apabila satu data diproses 1 detik, berarti 10 data memerlukan 100 detik.

Peningkatan kecepatan prosessor tidak terlalu menolong apabila algoritma-nya terlalu kompleks

Berikut ini adalah tabel perbandingan antara lima macam kerumitan algoritma

Page 4: Analisis Algoritma

Algoritma Kompleksitas 1 detik 1 menit 1 jam

A1 O(n) 1000 6 X 104 3.6 X 106

A2 O(n log n) 140 4893 2.0 X 105

A3 O(n2) 31 244 1897

A4 O(n3) 10 39 153

A5 O(2n) 9 15 21

Algoritma KompleksitasMaksimum Problem pada mesin lambat

Maksimum Problem pada mesin yang 10X lebih cepat

A1 O(n) n1 10 n1

A2 O(n log n) n2 10 n2 bila n2 besar

A3 O(n2) n3 3.16 n3

A4 O(n3) n4 2.15 n4

A5 O(2n) n5 n5 + 3.3

Andaikan kecepatan proses 1 millidetik/data

Page 5: Analisis Algoritma

0 5 10 15 200

5

10

15

20O(n)

0 5 10 15 200

1

2

3O(log n)

0 5 10 15 200

20

40

60O(n log n)

0 5 10 15 200

100

200

300

400O(n2)

0 5 10 15 200

2000

4000

6000

8000O(n3)

0 5 10 15 200

5

10

15x 10

5 O(2n)

Page 6: Analisis Algoritma

Algoritma Insertion_Sort { melakukan pengurutan data dengan teknik penyisipan }   Defenisi Variabel int i, j, n = 100; int A[n], key;   Rincian Langkah: for j = 2 to n key A[j]; { Sisip(A[j]) kedalam deretan A[1..j-1] } i (j – 1) ; while (i > 0 and A[i] > key) A[i+1] A[i]; i i – 1; endwhile A[i+1] key; endfor.

Page 7: Analisis Algoritma

Perhitungan Biaya: baris instruksi biaya waktu   1. for j = 2 to n b1 n 2. key A[j]; b2 n - 1 { Sisip(A[j]) kedalam deretan A[1..j-1] } 3. i (j – 1) ; b3 n - 1 4. while (i > 0 and A[i] > key) b4 j 5. A[i+1] A[i]; b5 (j – 1) 6. i i – 1; b6 (j – 1) endwhile 7. A[i+1] key; b7 n - 1 endfor.

Total Biaya: T(n) = b1.n + b2.(n-1) + b3.(n-1) + b4. j + b5. (j-1) + b6. (j-1) + b7.(n-1)Dimana : j = sigma dari j=2 s/d n, hasilnya adalah: n(n+1)/2 – 1 (j – 1) utk j=2 s/d n adalah : n(n-1)/2

Page 8: Analisis Algoritma

dengan demikian:

T(n) = b1.n + b2.(n-1) + b3.(n-1) + b4.(n(n+1)/2 – 1) + b5.(n(n-1)/2) + b6.(n(n-1)/2) + b7.(n-1)

T(n) = (b4/2 + b5/2 + b6/2) n2 + (b1 + b2 + b3 + b4/2 – b5/2 – b6/2 + b7) n – (b2 + b3 + b4 + b7).

Atau T(n) = A n2 + B n + C T(n) = O(n2)

Page 9: Analisis Algoritma

Sebagai kesimpulan, berikut ini disajikan salah satu langkah dalam melakukan analisis algoritma secara eksak:

 1. Tuliskan algoritma secara lengkap2. Tentukan waktu untuk setiap instruksi dasar3. Tentukan biaya atau frekuensi masing-masing

instruksi dasar4. Hitung total running-time dengan

menjumlahkan perkalian biaya dan waktu dari setiap baris instruksi dasar

5. Kumpulkan suku yang memiliki order yang sama

6. Lakukan pendekatan upper-bound

Page 10: Analisis Algoritma

Algoritma Euclid adalah algoritma untuk menghitung GCD (Greatest Common Divisor) atau KPT (Kelipatan Pembagi Terbesar), yang disajikan dalam bentuk fungsi sbb:

 Fungsi Euclid(m, n) integer{ menghitung KPT dari bilangan m dan n }Defenisi Variabel:

int t;Rincian Langkah:

while (m > 0) dot n mod m;n m;m t;

endwhile;return n

Page 11: Analisis Algoritma

Andaikan n > m, misalnya n=24 dan m=18 k=1 t = 24 mod 18 = 6, n=18, m=6 k=2 t = 18 mod 6 = 0, n=6, m=0 m=0 2 putaran, dengan KPT=n=6 K < log(18)=2.89

Andaikan n=124 dan m=28 K=1 t=124 mod 28 = 12, n=28, m=12 K=2 t = 28 mod 12 = 4, n=12, m=4 K=3 t = 12 mod 4 = 0, n=4, m=0 M=0 3 putaran, dengan KPT = 4 K < log(28) = 3.33

Page 12: Analisis Algoritma

Andaikan k adalah jumlah putaran dalam while, dan pada saat putaran ke-i berlangsung diperoleh ni = mi-1 dan

mi = ni-1 mod mi-1 dimana ni > mi

mi = ni-1 mod mi-1 < ni-1/2 = mi-2/2 Bila k dianggap ganjil = 2d + 1 maka:

mk-1<mk-3/2<mk-5/4<…<m0/2d

Karena mk-11 maka m0>2d atau d <2 log m0

Maka k = 2d + 1 1 + 2 log m0 Jadi T(n) = O(log m)

Page 13: Analisis Algoritma

“The Tower of Hanoi”. Menurut legenda dibalik soal ini, pada suatu waktu menurut kepercayaan Budha, Tuhan meletakkan 64 piringan emas (yang tengahnya berlubang) dengan ukuran yang berbeda pada sebuah tonggak yang dipenuhi berlian, dimana piringan tersusun menurut ukurannya, piringan terbesar berada paling bawah dan piringan terkecil paling atas, sehingga berbentuk menara (tower). Disediakan pula dua tonggak yang lain di-sekitarnya. Para pendeta Budha diperintahkan untuk memindahkan semua piringan ini dari satu tonggak ke tonggak lain, dengan syarat harus tersusun kembali seperti menara. Tonggak yang satu-nya lagi dapat digunakan untuk menyimpan sementara piringan yang akan dipindah namun harus tetap mengikuti urutan diameter, yang lebih besar dibawah, yang lebih kecil diatas. Andaikan pendeta Budha mampu memindahkan satu piringan setiap detik berapa lama waktu yang diperlukan untuk memindahkan ke-64 piringan emas ini dari satu tonggak ke tonggak lain dalam keadaan tersusun sempurna? Para pendeta Budha konon mempercayai bahwa pada saat semua piringan ini bisa pindah dengan sempurna maka pada saat itu “kiamat” datang! Adakah diantara anda yang bisa menjawab, berapa tahun diperlukan untuk melakukan pekerjaan tersebut?

Page 14: Analisis Algoritma

A B C

Prosedur Hanoi(m, a, c, b){ memindahkan m cincin dari tongkat a ke tongkat c }Defenisi Variabel:

int m;char a, b, c;

Rincian langkah:if (m==1) then write(“pindah dari “, a, “ke “,c);else Hanoi(m-1, a, b, c);

write(“pindah dari “, a, “ke”, c);Hanoi(m-1, b, c, a);

endif

Page 15: Analisis Algoritma

Soal ini dapat diselesaikan dengan logika matematik, menggunakan “induksi” dan “rekurensi”. Strateginya sebagai berikut:

Bila tidak ada piringan (n=0) maka tidak ada yang perlu di-pindahkan T(0) = 0.

Bila ada 1 piringan (n=1) maka hanya perlu 1 langkah, T(1)=1 Bila ada 2 piringan (n=2) maka perlu 3 langkah, atau T(2)=3,

yaitu:◦ pindahkan piring atas dari A ke B◦ pindahkan piring bawah dari A ke C◦ pindahkan piring atas dari B ke C

Bila ada 3 piringan (n=3) maka perlu 7 langkah, atau T(3)=7, yaitu:◦ pindahkan dua (n-1) piring atas:

paling atas dari A ke C yang tengah dari A ke B kembalikan paling atas dari C ke B

◦ pindahkan piring paling bawah ke C◦ pindahkan dua (n-1) piring dari B ke C

paling atas dari B ke A dulu yang tengah dari B ke C paling atas dari A ke C

T(n) = T(n-1) + 1 + T(n-1) = 2 T(n-1) + 1

Page 16: Analisis Algoritma

Bukti: T(1) = 2 T(0) + 1 = 0 + 1 = 1 T(2) = 2 T(1) + 1 = 2*1 + 1 = 3 T(3) = 2 T(2) + 1 = 2*3 + 1 = 7 selanjutnya: T(4) = 2 T(3) + 1 = 2*7 + 1 = 15 T(5) = 2 T(4) + 1 = 2*15 + 1 = 31 Tetapi: T(1) = 1 = 21 – 1 = 2 – 1 = 1 T(2) = 3 = 22 – 1 = 4 – 1 = 3 T(3) = 7 = 23 – 1 = 8 – 1 = 7 T(4) = 15 = 24 – 1 = 16 – 1 = 15 T(5) = 31 = 25 – 1 = 32 – 1 = 31 Kesimpulan : T(n) = 2n – 1

Page 17: Analisis Algoritma

Gunakan Rekurensi tak homogen: atau T(n) – 2 T(n-1) = 1karakteristik : T(n)- 2T(n-1)=1.1

b=1, P(n)=1, d=0atau (x – 2)(x-1) = 0

shg T(n) = c1.1 + c2.2n atau T(n)=O(2n)

Bila n=64, T(n) 264 1.84 x 1019 Bila unit waktu pemindahan 1 detik makaT(n) = 1.84 x 1019 / (60 x 60 x 24 x 356) thn = 5.99 x 1011 tahun = 599 milyar tahun

Page 18: Analisis Algoritma

Binary Heap adalah suatu struktur data yang dapat diwakili oleh suatu larik (array), juga dapat divisualisasi sebagai pohon biner, misalnya pada gambar berikut ini:

Sifat utama dari suatu “heap” adalah isi suatu node harus lebih besar (paling tidak sama) dari isi kedua node dibawahnya:

A[parent(i)] A[i] parent(i) floor(i/2) left(i) 2i right(i) 2i + 1

Page 19: Analisis Algoritma

1

2 3

4 5 6 7

8 9 10

14 10

8 7 9 3

2 4 1

16 14 10 8 7 9 3 2 4 1

16

Page 20: Analisis Algoritma

Prosedur Build_Heap(A) { membentuk binary heap dari array A } Definisi Variabel int A[n]; int i; Rincian Langkah size_heap[A] lenght[A]; for i floor(length[A]/2) downto 1 do Heapify(A,i);  

Page 21: Analisis Algoritma

Prosedur Heapify(A,i) { mengatur elemen agar memenuhi sifat

Heap } Definisi Variabel int largest, L, R; Rincian Langkah L left(i); R right(i); if (L size_heap[A] and A[L] > A[i]) then largest L; else largest i; if (R size_heap[A] and A[R] > A[largest]) then largest R; if (largest i) then Tukar(A[i], A[largest]); Heapify(A,largest);

Page 22: Analisis Algoritma

Analisis algoritma diatas adalah sbb: Prosedur Build_Heap(A), pada prinsipnya

memanggil prosedur Heapify(A,i) sebanyak (n/2) kali bila length[A] = n.

Prosedur Heapify(A,i), pada kondisi paling jelek, setiap cabang memiliki turunan maksimal 2n/3, sehingga rekurensi-nya T(n) T(2n/3) + (1)

Solusi rekurensi Heapify(A,i) adalah T(n) = O(lg n)

Dengan demikian kompleksitas prosedur membentuk binary heap adalah: n/2 . O(lg n) O(n lg n).