Você está na página 1de 5

Devide-and-conquer mungkin adalah tekhnik algoritma umum yang paling terkenal.

Devide-and-conquer diteladani dari strategi brilliant yang dipakai raja perancis Napoleon di pertempuran Austerlitz pada 2 desember 1805. Gabungan dari pasukan austria dan rusia melebihi jumlah pasukan napoleon yang berjumlah sekitar 15.000 tentara. Tentara Austria-Rusia melancarkan sereangan besar-besaran pada sayap kanan perancis. Mengantisipasi serangan mereka, napoleon menyerang barisan tengah mereka dan membagi pasukan mereka menjadi dua bagian. Karena dua pasukan tentara yang jumlahnya lebih kecil tidak sebanding dengan napoleon, masing-masing menderita kekalahan besar dan mundur. Dengan membagi pasukan yang besar menjadi dua pasukan yang lebih kecil dan menaklukannya, napoleon berhasil menaklukan jumlah pasukan yang besar. Devide-and-conquer bekerja dengan metode sebagai berikut : Sebuah permasalahan dibagi menjadi beberapa sub-permasalahan. Sub-permasalahan biasanya contoh dari masalah utama. Jika solusi dapat diperoleh dengan mudah, solusi untuk masalah utama dapat diperoleh dengan menggabungkan solusi-solusi tersebut. If sub-permasalahan masih terlalu besar, subpermasalah tersebut dapat dibagi lagi menjadi sub-permasalahan yang lebih kecil. Proses ini berlanjut sampai sesederhana mungkin yang mana solusi permasalahan dapat diperoleh dengan mudah. Pendekatan Devide-and-conquer adalah pendekatan top-down. Yang mana solusi dari permaslahan di top level diperoleh dengan menuju ke down dan memperoleh solusi dari permasalahan yang lebih kecil. Pembaca mungkin menyadari ini sebagai metode yang dipakai oleh rutinitas rekrusif. Ingatlah bahwa ketika menulis reksrusi, seseorang berpikir pada level pemecahan masalah dan menyerahkan system menangani detail dari memperoleh solusi. Ketika mengembangkan sebuah algoritma devide-andconquer, kita biasa berpikir pada tingkatan ini dan menulisnya sebagai rutinitas recrusif. Setelah itu, kita terkadang dapat membuat versi efisient yang berulah dari sebuah algoritma.

Contoh kasus Mencari nilai minimum dengan maksimum. Persoalan : Misalkan diberikan tabel A yang berukuran n elemen dan sudah berisi nilai integer integer. . Carilah nilai minimum dan nilai maksimum sekaligus di dalam table tersebut tersebut.

Misalakn elemen a berisi elemen-elemen sebagai berikut: 5 13 8 9 21 11 7 2 1 19 12

Dengan metode devide, kita mebagi table tersebut : 5 13 8 9 21 11 7 2 1 19 12

Devide 5 13 8 9 21 11 7 2 1 19 12

Solve : tentukan min & maks pada tiap bagian

5 Min = 5

13

21

11 min = 1

19

12

Maks = 21

maks = 19

Combine 5 Min = 1 Maks = 21 13 8 9 21 11 7 2 1 19 12

Ukuran table hasil pembagian dapat dibuat cukup kecil sehingga mencari minimum dan maksimum dapat diselesaikan(SOLVE) secara lebih mudah.

Dalam hal ini, ukuran kecil yang dipilih adalah 1 elemen atau 2 elemen.

MinMaks(A, n, min, maks) Algoritma: 1. Untuk kasus n=1 atau n=2, SOLVE : jika n = 1, maka min =maks = A[n] Jika n=2, maka badingkan kedua elemen untuk menetukan min dan maks. 2. Untuk kasus n > 2, a. DIVIDE : bagi dua table A menjadi dua bagian yang sama, A1 dan A2 b. CONQUER : MinMaks(A1, n/2, min1, maks1) MinMaks(A2, n/2, min2, maks2) c. COMBINE : If min1 < min2 then Min min1 Else Min min2 Endif If maks1 < maks2 then Maks maks2 Else Maks maks1 endif

procedure MinMaks2(input A : TabelInt, I, j : integer, output min, maks : integer) {mencari nilai maksimum dan minimum di dalam tabrl A yang berukuran n elemen secara devide anda conquer Masukan : table A yang sudah terdefinisi elemen-elemennya Keluaran : nilai maksimum dan nilai minimum tabel} Deklarasi1 Min1, min2, maks1, maks2 : integer Algoritma : If i=j then Min Ai Maks Ai Else If (I = j-1) then If Ai < Aj then Maks Aj Min Ai else maks Ai min Aj endif endif else k (i+j) div 2
MinMaks2(A, i, k, min1, maks1) MinMaks2(A, k+1, j, min2, maks2) if min1 < min2 then min min1 else min min2 endif if maks1 < maks2 then maks maks2 else maks maks1 endif

endif

Você também pode gostar