Anda di halaman 1dari 9

1. a.

Algoritma proses divide and conquer


procedure MinMaks2(input A : TabelInt, i, j : integer, output min, maks : integer) { Mencari nilai maksimum dan minimum di dalam tabel A yang berukuran n elemen secara Divide and Conquer. Masukan: tabel A yang sudah terdefinisi elemen-elemennya Keluaran: nilai maksimum dan nilai minimum tabel } Deklarasi min1, min2, maks1, maks2 : integer Algoritma: if i=j then minAi maksAi else if (i = j-1) then if Ai< Ajthen maksAj minAi else maksAi minAj endif else k(i+j) div 2 { lebih dari 2 elemen } { bagidua tabel pada posisi k } { 2 elemen } { 1 elemen }

MinMaks2(A, i, k, min1, maks1) MinMaks2(A, k+1, j, min2, maks2) if min1 < min2 then minmin1

else minmin2 endif

if maks1<maks2 then maksmaks2 else maksmaks2 endif

jadi pertama dilakukan divide data input sampai data terbagi bagi menjadi paling banyak 2 data dalam 1 bagian. Setelah itu baru dilakukan proses pencarian nilai maksimum dan minimum tiap bagian. Setelah pencarian tiap bagian selesai, hasil semuanya dibandingkan dengan bagian lain agar didapat nilai maksimum dan minimum keseluruhan (sesuai data awal). b. Bagan recurrence
1, 5, 4, 8, 10, 2, 6, 9, 12, 11 ,3 ,7

1, 5, 4, 8, 10, 2

6, 9, 12, 11, 3, 7

1, 5, 4

8, 10, 2

6, 9, 12

11, 3, 7

5, 4

10, 2

9, 12

11

3, 7

1 Maks = 1 min = 1

5, 4 Maks = 5 Min = 4

8 Maks = 8 Min = 8

10, 2 Maks = 10 Min = 2

6 Maks = 6 Min = 6

9, 12 Maks = 12 Min = 9

11 Maks = 11 Min = 11

3, 7 Maks = 7 Min = 3

1, 5, 4 Maks = 5 Min = 1

8, 10, 2 Maks = 10 Min = 2

6, 9, 12 Maks = 12 Min = 6

11, 3, 7 Maks = 11 Min 3

1, 5, 4, 8, 10, 2 Maks = 10 Min = 1

6, 9, 12, 11, 3, 7 Maks = 12 Min = 3

1, 5, 4, 8, 10, 2, 6, 9, 12, 11 ,3 ,7 Maks = 12 Min = 1

2. a. Pseudocode if i=j then maksAi else if (i = j-1) then if Ai< Ajthen maksAj else maksAi endif else //devide k(i+j) div 2 Maks2(A, i, k, maks1) Maks2(A, k+1, j, maks2) //combine if maks1<maks2 then maksmaks2 else maksmaks1 endif b. Pohon diagram { bagidua tabel pada posisi k } { lebih dari 2 elemen } { 2 elemen } { 1 elemen }

n/2

n/2

n/4

n/4

n/4

n/4

Kompleksitas 0 T(n) = 1 2T(n/2) + 1 ,n=1 ,n=2 ,n>2

Karena asumsi n = 2k dengan k bilangan bulat positif maka T(n) = 2T(n/2) + 1 = 2(2T(n/2)/4+1)+1 = 4T(n/4) + 2 + 1 = 4(2T(n/2)/4) /4+1)+2+1 = 8T(n/8)+4 + 2 + 1 = = 2k-1 . T(2) + i=0k-2 2i

= 2k-1 . 1 + 2k-1 2 = n/2 + n/2 2 =n2 T(n) = O(n)

c. Apabila kita menggunakan metode bruteforce pencarian harus dilakukan satu persatu yang menyebabkan semakin banyaknya data yang digunakan maka semakin lama proses yang terjadi, dengan dengan metode devide and conquer data dapat dibagi bagi agar lebih mudah dan cepat diproses. Hal ini terbukti dari running time program dengan metode D&C ini menghasilkan running time n-2, sedangkan dengan metode bruteforce adalah selama n (sebanyak elemen input).

3. Merge Sort EXAMPLE E E E E E A A X X X X A E E A A A A X X E M M M M M E L P P P P P L M L L L L E M P E E E E L P X

Contoh menggunakan Recurrence relation


E X A M P L E

4. T(n)

= 2T(n/2) + 2 = 2(2T(n/2)/4+2)+2 = 4T(n/4) + 4 + 2 = 4(2T(n/2)/4) /4+2)+4+2 = 8T(n/8)+8 + 4 + 2 = = 2k-1 . T(2) + i=1k-1 2i = 2k-1 . 1 + 2k 2 = n/2 + n 2 = 3n/2 2

T(n)

= O(n)

5. Quicksort dengan divide and conquer 2, 1, 4, 8, 9, 5, 7, 6


2 1 4 8 9 5 7 6 6 sebagai pivot

p 2 1 4 6 9 5 7

q 8 6 masih pivot

p 2 1 4 6 5

q 9 7 8 6 masih pivot

p 2 1 4 5

q 6 9 7 8

Hasil partisi pertama Pivot 4 2 1 tetap p 6 7 q 9 8 4 5 6 9 7 8 Pivot 7

Hasil Partisi Kedua 2 1 4 5 6 7 9 8

tetap p q Pivot 4

tetap p Pivot 7 Hasil Akhir q

Pivot 2

Pivot 8

6. Penjelasan Closest Pair a. Misal diberikan sebuah diagram cartesius dengan sebaran titik sebagai berikut

Bagi diagram menjadi 2 berdasarkan posisi dari bidang x. jika setelah dibagi jumlah titik tiap sisi bagi tersebut bukan 2 maka bagi lagi sampai berjumlah 2 atau 1 titik tiap sisi.

Pleft 1

Pright 1 Pleft 2

Pright 2 1

Setelah terbagi hitung jarak antar titik tiap sisi. jarak P1 P2, P3 P4, P5 P6, P7 P8 bandingkan jarak pada Pleft1 dan Pright1 setelah ditemukan hitung apakah jarak antara titik pada perbatasan Pleft1 dan Pright1 lebih sedikit dari temuan awal. Lakukan juga hal ini pada Pleft2 dan Pright2. Setelah dapat nilai pada kedua sisi tersebut bandingkan antar 2 hasil tersebut dengan cara yang sama agar dapat ditemukan jarak terkecil dari 2 titik pada diagram tersebut. b. Pseudo Code
procedure FindClosestPair2(input P: SetOfPoint, n : integer, output delta : real) { Mencari jarak terdekat sepasang titik di dalam himpunan P. } Deklarasi: DeltaLeft, DeltaRight : real Algoritma: if n = 2 then delta jarak kedua titik dengan rumus Euclidean else P-Left {p1, p2 ,..., pn/2 } P-Right {pn/2+1, pn/2+2 ,..., pn } FindClosestPair2(P-Left, n/2, DeltaLeft) FindClosestPair2(P-Right, n/2, DeltaRight) delta minimum(DeltaLeft, DeltaRight) {-***********************************************************--} Tentukan apakah terdapat titik pl di P-Left dan pr di P-Right Dengan jarak(pl, pr) < delta. Jika ada, set delta dengan jarak terkecil tersebut. {-***********************************************************--} endif

for i1 to s do for ji+1 to s do exit when (|qi.x qj.x | > Delta or |qi.y qj.y | > Delta if jarak (qi, qj) < Delta then Delta jarak(qi, qj) { dihitung dengan rumus Euclidean } endif endfor endfor

Kompleksitas dari pseudocode divide and conquer diatas:

2T (n / 2) cn , n 2 T (n) a ,n 2
C(n) = O(n log n). Pseudocode dengan brute force

Kompleksitas : C(n) = O(n^2)

Anda mungkin juga menyukai