Heru C Rustamaji

Pak Dosen juga nge-Blog

Divide and Conquer

Salah satu strategi penyelesaian masalah dalam bidang komputasi adalah menggunakan divide dan conquer. Caranya adalah memecah problem menjadi beberapa sub problem. Masing masing sub problem tersebut dipecahkan dan selanjutnya solusinya digabungkan dengan suatu mekanisme tertentu. Apabila sub problem tersebut masih tidak bisa dipecahkan secara langsung, maka sub problem tersebut dipecah kembali menjadi beberapa sub problem secara divide an conquer. Dalam aplikasinya, hal tersebut bisa diselesaikan secara rekursif.

BINARY SEARCH

Salah satu penggunaan strategi penyelesaian menggunakan divide and conquer adalah dalam algoritma searching menggunakan binary search untuk suatu array yang telah terurut. Dengan menggunakan algoritma ini maka kompleksitas algoritma ini adalah O(log n). inilah algoritmanya :

int BinSearch (KeyType A [], int n, KeyType Key,int & Where)
// Search A [0 .. n-1] for Key. If found return
// TRUE and set Where to the subscript where found;
// otherwise, return FALSE . Assume A is in ascending
// sorted order and n > 0 .
{
int Lo = 0, Hi = n;
assert (n > 0);
while (Lo < Hi - 1)
{
Where = (Lo + Hi) / 2;
if (Key < A [Where])
Hi = Where;
else
Lo = Where;
}
Where = Lo;
return (Key == A [Lo]);
}

MERGE SORT

Inilah salah satu alternatif melakukan pengurutan /sorting menggunakan strategi divide and conquer. Kompleksitasnya algoritmanya dinyatakan dengan relasi rekurens T (n) = 2T (n/2) + n yang akan menghasilkan solusi O(n lg n)

MergeSort (TYPE A [], int n)
{
if (n > 1)
{
MergeSort (A, n/2);
MergeSort (A + n/2, n - n/2)
Merge (A, n/2, A + n/2, n - n/2, A)
}
}

Kelemahan merge sort ini adalah dibutuhkan memory ekstra pada saat fase Merge, bukan menggunakan teknik ‘in-place’.

PERKALIAN MATRIKS

Perkalian matriks yang biasa dilakukan, apabila dibuat prosedurnya secara biasa akan menghasilkan kompleksitas O(n^3). Hal tersebut dilakukan dengan menghitung masing masing elemen hasil perkalian matriks dengan rumus

C(i,j) = ? A(i,k) B(k,j)

Namun hal tersebut bisa dipangkas lagi menggunakan algoritma strassen, dimana setiap matriks dibagi menjadi 4 partisi, sebagai contoh sebuah matriks A dipartisi menjadi

A11 | A12
—————–
A21 | A22

dan dilakukan perhitungan sebagai berikut

M1 = (A11 + A22)(B11 + B22)

M2 = (A11 + A22)B11

M3 = A11(B11 ? B22)

M4 = A22(B21 ? B11)

M5 = (A11 + A12)B22

M6 = (A21 ? A11)(B11 + B12)

M7 = (A12 ? A22)(B21 + B22)

Diperoleh hasil perkalian matriks sebagai berikut:

C11 = M1 + M4 ? M5 + M7

C12 = M3 + M5

C21 = M2 + M4

C22 = M1 + M3 ? M2 + M6

Kompleksitas algoritmanya dapat dihitung dengan formulasi berikut

M (n) = 7M (n/2)

M (1) = 1;

Relasi rekurens tersebut akan menghasilkan solusi O(n ^ 2.807)

Share :
  • Facebook
  • Twitter
Categories: IT - Perkuliahan
konco lawas
kalo komputernya ngehang bagaimana pak?
jadi divide terus tapi ndak bisa bisa conquer?
11 June 08 at 23:56
GhE
pak,apakah strategi divide and conquer dapat diterapkan kesmua sorting atau cuma pada mergerort saja?
1 January 09 at 23:04
@ghe
Divide and Conquer pada sorting bisa dilakukan dengan memecah data yang akan disorting ke dalam beberapa bagian dan kemudian menyelesaikan setiap sub bagian, hasilnya kemudian digabungkan. Hal seperti itu terdapat pada merge sort, heap sort dan quicksort.
2 January 09 at 00:05