MinMaks2(A, i, k, min1, maks1) MinMaks2(A, k+1, j, min2, maks2) if min1 < min2 then minmin1
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
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
6, 9, 12 Maks = 12 Min = 6
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
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
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).
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)
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
tetap p q Pivot 4
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
2T (n / 2) cn , n 2 T (n) a ,n 2
C(n) = O(n log n). Pseudocode dengan brute force