SlideShare a Scribd company logo
Algoritma Divide and Conquer 
Kelompok 8 
Edho Pratama Bisma Andika 52412355 
Febryansyah Handoni 52412862 
Rio Septianur 56412439
• Divide and Conquer dulunya adalah 
strategi militer yang dikenal dengan nama 
divide ut imperes. 
• Sekarang strategi tersebut menjadi 
strategi fundamental di dalam ilmu 
komputer dengan nama Divide and 
Conquer.
DEFINISI 
• Divide: membagi masalah menjadi beberapa upa-masalah 
yang memiliki kemiripan dengan masalah 
semula namun berukuran lebih kecil (idealnya 
berukuran hampir sama), 
• Conquer: memecahkan (menyelesaikan) masing-masing 
upa-masalah (secara rekursif), dan 
• Combine: mengabungkan solusi masing-masing upa-masalah 
sehingga membentuk solusi masalah 
semula.
• Obyek permasalahan yang dibagi : 
masukan (input) atau instances yang berukuran n 
seperti: 
- tabel (larik), 
- matriks, 
- eksponen, 
- dll, bergantung pada masalahnya. 
• Tiap-tiap upa-masalah mempunyai karakteristik yang 
sama (the same type) dengan karakteristik masalah asal, 
sehingga metode Divide and Conquer lebih natural 
diungkapkan dalam skema rekursif.
Skema Umum Algoritma Divide and Conquer 
procedure DIVIDE_and_CONQUER(input n : integer) 
{ Menyelesaikan masalah dengan algoritma D-and-C. 
Masukan: masukan yang berukuran n 
Keluaran: solusi dari masalah semula 
} 
Deklarasi 
r, k : integer 
Algoritma 
if n £ n0 then {ukuran masalah sudah cukup kecil } 
SOLVE upa-masalah yang berukuran n ini 
else 
Bagi menjadi r upa-masalah, masing-masing berukuran n/k 
for masing-masing dari r upa-masalah do 
DIVIDE_and_CONQUER(n/k) 
endfor 
COMBINE solusi dari r upa-masalah menjadi solusi masalah semula } 
endif
Jika pembagian selalu menghasilkan dua upa-masalah yang 
berukuran sama: 
procedure DIVIDE_and_CONQUER(input n : integer) 
{ Menyelesaikan masalah dengan algoritma D-and-C. 
Masukan: masukan yang berukuran n 
Keluaran: solusi dari masalah semula 
} 
Deklarasi 
r, k : integer 
Algoritma 
if n £ n0 then {ukuran masalah sudah cukup kecil } 
SOLVE upa-masalah yang berukuran n ini 
else 
Bagi menjadi 2 upa-masalah, masing-masing berukuran n/2 
DIVIDE_and_CONQUER(upa-masalah pertama yang berukuran n/2) 
DIVIDE_and_CONQUER(upa-masalah kedua yang berukuran n/2) 
COMBINE solusi dari 2 upa-masalah 
endif
Contoh-contoh masalah 
1. Mencari Nilai Minimum dan Maksimum 
(MinMaks) 
Persoalan: Misalkan diberikan tabel A yang 
berukuran n elemen dan sudah berisi nilai 
integer. 
Carilah nilai minimum dan nilai maksimum 
sekaligus di dalam tabel tersebut.
Penyelesaian dengan Algoritma Brute Force 
procedure MinMaks1(input A : TabelInt, n : integer, 
output min, maks : integer) 
{ Mencari nilai minimum dan maksimum di dalam tabel A yang berukuran n 
elemen, secara brute force. 
Masukan: tabel A yang sudah terdefinisi elemen-elemennya 
Keluaran: nilai maksimum dan nilai minimum tabel 
} 
Deklarasi 
i : integer 
Algoritma: 
min¬ A1 { inisialisasi nilai minimum} 
maks¬A1 { inisialisasi nilai maksimum } 
for i¬2 to n do 
if Ai < min then 
min¬Ai 
endif 
if Ai > maks then 
maks¬Ai 
endif 
endfor
Penyelesaian dengan Divide and Conquer 
Contoh 4.1. Misalkan tabel A berisi elemen-elemen sebagai berikut: 
4 12 23 9 21 1 35 2 24 
Ide dasar algoritma secara Divide and Conquer: 
4 12 23 9 21 1 35 2 24 
DIVIDE 
4 12 23 9 21 1 35 2 24 
SOLVE: tentukan min & 
maks pada tiap bagian 
4 12 23 9 21 1 35 2 24 
min = 4 min = 1 
maks = 23 maks = 35 
COMBINE 
4 12 23 9 21 1 35 2 24 
min = 1 
maks = 35
• Ukuran tabel 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 bandingkan kedua elemen untuk 
menentukan min dan maks. 
2. Untuk kasus n > 2, 
(a) DIVIDE: Bagi dua tabel 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 
if maks1 <maks2 then maks <- maks2 else maks <- maks1
Contoh 4.2. Tinjau kembali Contoh 4.1 di atas. 
DIVIDE dan CONQUER: 
4 12 23 9 21 1 35 2 24 
4 12 23 9 21 1 35 2 24 
4 12 23 9 21 1 35 2 24 
SOLVE dan COMBINE: 
4 12 23 9 21 1 35 2 24 
min = 4 min = 9 min = 1 min = 35 min = 2 
maks = 12 maks = 23 maks = 21 maks =35 maks = 24 
4 12 23 9 21 1 35 2 24 
min = 4 min = 1 min = 2 
maks = 23 maks = 21 maks = 35 
4 12 23 9 21 1 35 2 24 
min = 4 min = 1 
maks = 23 maks = 35 
4 12 23 9 21 1 5 2 24 
min = 1 
maks = 35
• MinMaks1 secara brute force : 
T(n) = 2n – 2 
• MinMaks2 secara divide and conquer: 
T(n) = 3n/2 – 2 
• Perhatikan: 3n/2 – 2 < 2n – 2 , n ³ 2. 
• Kesimpulan: algoritma MinMaks lebih 
mangkus dengan metdoe Divide and Conquer.
2. Algoritma Pengurutan dengan 
Metode Divide and Conquer 
procedure Sort(input/output A : TabelInt, input n : integer) 
{ Mengurutkan tabel A dengan metode Divide and Conquer 
Masukan: Tabel A dengan n elemen 
Keluaran: Tabel A yang terurut 
} 
Algoritma: 
if Ukuran(A) > 1 then 
Bagi A menjadi dua bagian, A1 dan A2, masing-masing berukuran n1 
dan n2 (n = n1 + n2) 
Sort(A1, n1) { urut bagian kiri yang berukuran n1 elemen } 
Sort(A2, n2) { urut bagian kanan yang berukuran n2 elemen } 
Combine(A1, A2, A) { gabung hasil pengurutan bagian kiri dan 
bagian kanan } 
end
Contoh: 
A 4 12 3 9 1 21 5 2 
Dua pendekatan (approach) pengurutan: 
1. Mudah membagi, sulit menggabung (easy split/hard join) 
Tabel A dibagidua berdasarkan posisi elemen: 
Divide: A1 4 12 3 9 A2 1 21 5 2 
Sort: A1 3 4 9 12 A2 1 2 5 21 
Combine: A1 1 2 3 4 5 9 12 21 
Algoritma pengurutan yang termasuk jenis ini: 
a. urut-gabung (Merge Sort) 
b. urut-sisip (Insertion Sort)
2. Sulit membagi, mudah menggabung (hard split/easy join) 
Tabel A dibagidua berdasarkan nilai elemennya. Misalkan 
elemen-elemen A1 £ elemen-elemen A2. 
Divide: A1 4 2 3 1 A2 9 21 5 12 
Sort: A1 1 2 3 4 A2 5 9 12 21 
Combine: A 1 2 3 4 5 9 12 21 
Algoritma pengurutan yang termasuk jenis ini: 
a. urut-cepat (Quick Sort) 
b. urut-seleksi (Selection Sort)
(a) Merge Sort 
Algoritma: 
1. Untuk kasus n = 1, maka tabel A sudah terurut dengan 
sendirinya (langkah SOLVE). 
2. Untuk kasus n > 1, maka 
(a) DIVIDE: bagi tabel A menjadi dua bagian, 
bagian kiri dan bagian kanan, masing-masing 
bagian berukuran n/2 elemen. 
(b) CONQUER: Secara rekursif, terapkan 
algoritma D-and-C pada masing-masing 
bagian. 
(c) MERGE: gabung hasil pengurutan kedua 
bagian sehingga diperoleh tabel A yang terurut.
Contoh Merge: 
A1 A2 B 
1 13 24 2 15 27 1 < 2 ® 1 1 
1 13 24 2 15 27 2 <13 ® 2 1 2 
1 13 24 2 15 27 13<15®13 1 2 13 
1 13 24 2 15 27 15<24®15 1 2 13 15 
1 13 24 2 15 27 24<27®24 1 2 13 15 24 
1 13 24 2 15 27 27 ® 1 2 13 15 24 27
Contoh 4.3. Misalkan tabel A berisi elemen-elemen berikut: 
4 12 23 9 21 1 5 2 
DIVIDE, CONQUER, dan SOLVE: 
4 12 23 9 21 1 5 2 
4 12 23 9 21 1 5 2 
4 12 23 9 21 1 5 2 
4 12 23 9 21 1 5 2 
MERGE: 4 12 9 23 1 21 2 5 
4 9 12 23 1 2 5 21 
1 2 4 5 9 12 21 23
procedure MergeSort(input/output A : TabelInt, input i, j : integer) 
{ Mengurutkan tabel A[i..j] dengan algoritma Merge Sort 
Masukan: Tabel A dengan n elemen 
Keluaran: Tabel A yang terurut 
} 
Deklarasi: 
k : integer 
Algoritma: 
if i < j then { Ukuran(A)> 1} 
k¬(i+j) div 2 
MergeSort(A, i, k) 
MergeSort(A, k+1, j) 
Merge(A, i, k, j) 
endif
Prosedur Merge: 
procedure Merge(input/output A : TabelInt, input kiri,tengah,kanan : 
integer) 
{ Menggabung tabel A[kiri..tengah] dan tabel A[tengah+1..kanan] 
menjadi tabel A[kiri..kanan] yang terurut menaik. 
Masukan: A[kiri..tengah] dan tabel A[tengah+1..kanan] yang sudah 
terurut menaik. 
Keluaran: A[kiri..kanan] yang terurut menaik. 
} 
Deklarasi 
B : TabelInt 
i, kidal1, kidal2 : integer 
Algoritma: 
kidal1¬kiri { A[kiri .. tengah] } 
kidal2¬tengah + 1 { A[tengah+1 .. kanan] } 
i¬kiri 
while (kidal1 £ tengah) and (kidal2 £ kanan) do 
if Akidal1 £ Akidal2 then 
Bi¬A 
kidal1 
kidal1¬k 
idal1 + 1 
else 
Bi¬A 
kidal2 
kidal2¬k 
idal2 + 1 
endif 
i¬i 
+ 1 
endwhile 
{ kidal1 > tengah or kidal2 > kanan } 
{ salin sisa A bagian kiri ke B, jika ada } 
while (kidal1 £ tengah) do 
Bi¬A 
kidal1 
kidal1¬k 
idal1 + 1 
i¬i 
+ 1 
endwhile 
{ kidal1 > tengah } 
{ salin sisa A bagian kanan ke B, jika ada } 
while (kidal2 £ kanan) do 
Bi¬A 
kidal2 
kidal2¬k 
idal2 + 1 
i¬i + 1 
endwhile 
{ kidal2 > kanan } 
{ salin kembali elemen-elemen tabel B ke A } 
for i¬kiri to kanan do 
Ai¬B 
i 
endfor 
{ diperoleh tabel A yang terurut membesar }
· Kompleksitas waktu: 
Asumsi: n = 2k 
T(n) = jumlah perbandingan pada pengurutan dua buah 
upatabel + jumlah perbandingan pada prosedur Merge
Penyelesaian: 
T(n) = 2T(n/2) + cn 
= 2(2T(n/4) + cn/2) + cn = 4T(n/4) + 2cn 
= 4(2T(n/8) + cn/4) + 2cn = 8T(n/8) + 3cn 
= ... 
= 2k T(n/2k) +kcn 
Berhenti jika ukuran tabel terkecil, n = 1: 
n/2k = 1 ® k = 2log n 
sehingga 
T(n) = nT(1) + cn 2log n 
= na + cn 2log n 
= O(n 2log n)
(b) Insertion Sort 
procedure InsertionSort(input/output A : TabelInt, 
input i, j : integer) 
{ Mengurutkan tabel A[i..j] dengan algoritma Insertion Sort. 
Masukan: Tabel A dengan n elemen 
Keluaran: Tabel A yang terurut 
} 
Deklarasi: 
k : integer 
Algoritma: 
if i < j then { Ukuran(A)> 1} 
k¬i 
InsertionSort(A, i, k) 
InsertionSort(A, k+1, j) 
Merge(A, i, k, j) 
endif
Perbaikan: 
procedure InsertionSort(input/output A : TabelInt, 
input i, j : integer) 
{ Mengurutkan tabel A[i..j] dengan algoritma Insertion Sort. 
Masukan: Tabel A dengan n elemen 
Keluaran: Tabel A yang terurut 
} 
Deklarasi: 
k : integer 
Algoritma: 
if i < j then { Ukuran(A)> 1} 
k¬i 
Insertion(A, k+1, j) 
Merge(A, i, k, j) 
endif 
Prosedur Merge dapat diganti dengan prosedur penyisipan sebuah elemen 
pada tabel yang sudah terurut (lihat algoritma Insertion Sort versi iteratif).
Contoh 4.4. Misalkan tabel A berisi elemen-elemen berikut: 
4 12 23 9 21 1 5 2 
DIVIDE, CONQUER, dan SOLVE:: 
4 12 3 9 1 21 5 2 
4 12 3 9 1 21 5 2 
4 12 3 9 1 21 5 2 
4 12 3 9 1 21 5 2 
4 12 3 9 1 21 5 2 
4 12 3 9 1 21 5 2 
4 12 3 9 1 21 5 2 
4 12 3 9 1 21 5 2 
4 12 3 9 1 21 5 2
MERGE: 4 12 3 9 1 21 5 2 
3 4 12 9 1 21 5 2 
3 4 9 12 1 21 5 2 
1 3 4 9 12 21 5 2 
1 3 4 9 12 21 5 2 
1 3 4 5 9 12 21 2 
1 2 3 4 5 9 12 21
Kompleksitas waktu algoritma Insertion Sort: 
Penyelesaian: 
T(n) = cn + T(n – 1) 
= cn + { c × (n – 1) + T(n – 2) } 
= cn + c(n – 1) + { c × (n – 2) + T(n – 3) } 
= cn + c × (n – 1) + c × (n – 2) + {c(n – 3) + T(n – 4) } 
= ... 
= cn + c × (n – 1) + c(n – 2) + c(n – 3) + ... + c2 + T(1) 
= c{ n + (n – 1) + (n – 2) + (n – 3) + ... + 2 } + a 
= c{ (n – 1)(n + 2)/2 } + a 
= cn2/2 + cn/2 + (a – c ) 
= O(n2)

More Related Content

PPTX
Ruang Vektor ( Aljabar Linear Elementer )
PPTX
VEKTOR DI BIDANG DAN DI RUANG ( Aljabar Linear Elementer )
PDF
Relasi Rekurensi
DOCX
Matematika diskrit (dual graf, lintasan dan sirkuit euler, lintasan dan sirku...
DOCX
Analisis Real (Barisan Bilangan Real) Latihan bagian 2.3
PDF
Matematika Diskrit - 07 teori bilangan - 01
PPTX
Matematika Diskrit Relasi Rekursif
PPTX
Graf ( Matematika Diskrit)
Ruang Vektor ( Aljabar Linear Elementer )
VEKTOR DI BIDANG DAN DI RUANG ( Aljabar Linear Elementer )
Relasi Rekurensi
Matematika diskrit (dual graf, lintasan dan sirkuit euler, lintasan dan sirku...
Analisis Real (Barisan Bilangan Real) Latihan bagian 2.3
Matematika Diskrit - 07 teori bilangan - 01
Matematika Diskrit Relasi Rekursif
Graf ( Matematika Diskrit)

What's hot (20)

PPTX
Graf Pohon
PPTX
Rekursi dan relasi rekurens
PDF
Matematika Diskrit - 09 graf - 06
PPTX
Metode dan Strategi Pembuktian
DOCX
Contoh soal dan pembahasan subgrup
PDF
Matematika Diskrit - 07 teori bilangan - 04
PDF
02.logika
DOCX
ANALISIS RIIL 1 3.3 dan 3.4 ROBERT G BARTLE
PPTX
5 permutasi dan kombinasi
PPT
Matematika Diskrit part 2
PDF
Matematika Diskrit - 03 himpunan - 05
PDF
Relasi rekursi (2) : Menentukan solusi relasi Rekursi Linier Homogen Berkoefi...
PDF
Koset Suatu Grup
PDF
Analisis Algoritma - Strategi Algoritma Divide and Conquer
PPTX
Materi 3 Finite State Automata
PDF
Matematika Diskrit - 05 rekursi dan relasi rekurens - 04
PPS
Bab 6. Integral ( Kalkulus 1 )
PDF
Matematika Diskrit - 11 kompleksitas algoritma - 03
PPTX
Teorema multinomial dan prinsip sarang merpati
PPT
4.matriks dan relasi
Graf Pohon
Rekursi dan relasi rekurens
Matematika Diskrit - 09 graf - 06
Metode dan Strategi Pembuktian
Contoh soal dan pembahasan subgrup
Matematika Diskrit - 07 teori bilangan - 04
02.logika
ANALISIS RIIL 1 3.3 dan 3.4 ROBERT G BARTLE
5 permutasi dan kombinasi
Matematika Diskrit part 2
Matematika Diskrit - 03 himpunan - 05
Relasi rekursi (2) : Menentukan solusi relasi Rekursi Linier Homogen Berkoefi...
Koset Suatu Grup
Analisis Algoritma - Strategi Algoritma Divide and Conquer
Materi 3 Finite State Automata
Matematika Diskrit - 05 rekursi dan relasi rekurens - 04
Bab 6. Integral ( Kalkulus 1 )
Matematika Diskrit - 11 kompleksitas algoritma - 03
Teorema multinomial dan prinsip sarang merpati
4.matriks dan relasi
Ad

Similar to Algoritma Divide and Conquer (20)

PDF
4 jna jgnodh5lp0cdaaykzgqjvmqseyyopejhq62g
PPT
Algoritma divide and conquer (lanjutan)
PDF
Algoritma-Divide-and-Conquer-(2021)-Bagian1.pdf
PPTX
BAB 5.pptx
PPTX
Algoritma sorting
PPTX
Algoritma Devide and Conquer
PPTX
Algoritma Divide and Conquer (Sorting & Searching)
DOCX
Struktur data dan algoritma
PPTX
Algoritma divide-and-conquer mesti bener aku garap dewe.pptx
PDF
Jeni Intro2 Bab06 Algoritma Sorting
PDF
Makalah shell sort
PPTX
Decrease and Conquer in analysis of algorithms.pptx
DOC
Tugas selamat riady algoritma
PPTX
Perbandingan algoritma brute force , divide and conquer
PPTX
[10] sorting
PDF
Sorting insert binary
PDF
Pengurutan (Sorting)
PDF
Analisis Algoritma Pada Masalah Sorting
PDF
Array statis if
PPTX
materi tentang Algoritma_Sorting kelas x.pptx
4 jna jgnodh5lp0cdaaykzgqjvmqseyyopejhq62g
Algoritma divide and conquer (lanjutan)
Algoritma-Divide-and-Conquer-(2021)-Bagian1.pdf
BAB 5.pptx
Algoritma sorting
Algoritma Devide and Conquer
Algoritma Divide and Conquer (Sorting & Searching)
Struktur data dan algoritma
Algoritma divide-and-conquer mesti bener aku garap dewe.pptx
Jeni Intro2 Bab06 Algoritma Sorting
Makalah shell sort
Decrease and Conquer in analysis of algorithms.pptx
Tugas selamat riady algoritma
Perbandingan algoritma brute force , divide and conquer
[10] sorting
Sorting insert binary
Pengurutan (Sorting)
Analisis Algoritma Pada Masalah Sorting
Array statis if
materi tentang Algoritma_Sorting kelas x.pptx
Ad

Algoritma Divide and Conquer

  • 1. Algoritma Divide and Conquer Kelompok 8 Edho Pratama Bisma Andika 52412355 Febryansyah Handoni 52412862 Rio Septianur 56412439
  • 2. • Divide and Conquer dulunya adalah strategi militer yang dikenal dengan nama divide ut imperes. • Sekarang strategi tersebut menjadi strategi fundamental di dalam ilmu komputer dengan nama Divide and Conquer.
  • 3. DEFINISI • Divide: membagi masalah menjadi beberapa upa-masalah yang memiliki kemiripan dengan masalah semula namun berukuran lebih kecil (idealnya berukuran hampir sama), • Conquer: memecahkan (menyelesaikan) masing-masing upa-masalah (secara rekursif), dan • Combine: mengabungkan solusi masing-masing upa-masalah sehingga membentuk solusi masalah semula.
  • 4. • Obyek permasalahan yang dibagi : masukan (input) atau instances yang berukuran n seperti: - tabel (larik), - matriks, - eksponen, - dll, bergantung pada masalahnya. • Tiap-tiap upa-masalah mempunyai karakteristik yang sama (the same type) dengan karakteristik masalah asal, sehingga metode Divide and Conquer lebih natural diungkapkan dalam skema rekursif.
  • 5. Skema Umum Algoritma Divide and Conquer procedure DIVIDE_and_CONQUER(input n : integer) { Menyelesaikan masalah dengan algoritma D-and-C. Masukan: masukan yang berukuran n Keluaran: solusi dari masalah semula } Deklarasi r, k : integer Algoritma if n £ n0 then {ukuran masalah sudah cukup kecil } SOLVE upa-masalah yang berukuran n ini else Bagi menjadi r upa-masalah, masing-masing berukuran n/k for masing-masing dari r upa-masalah do DIVIDE_and_CONQUER(n/k) endfor COMBINE solusi dari r upa-masalah menjadi solusi masalah semula } endif
  • 6. Jika pembagian selalu menghasilkan dua upa-masalah yang berukuran sama: procedure DIVIDE_and_CONQUER(input n : integer) { Menyelesaikan masalah dengan algoritma D-and-C. Masukan: masukan yang berukuran n Keluaran: solusi dari masalah semula } Deklarasi r, k : integer Algoritma if n £ n0 then {ukuran masalah sudah cukup kecil } SOLVE upa-masalah yang berukuran n ini else Bagi menjadi 2 upa-masalah, masing-masing berukuran n/2 DIVIDE_and_CONQUER(upa-masalah pertama yang berukuran n/2) DIVIDE_and_CONQUER(upa-masalah kedua yang berukuran n/2) COMBINE solusi dari 2 upa-masalah endif
  • 7. Contoh-contoh masalah 1. Mencari Nilai Minimum dan Maksimum (MinMaks) Persoalan: Misalkan diberikan tabel A yang berukuran n elemen dan sudah berisi nilai integer. Carilah nilai minimum dan nilai maksimum sekaligus di dalam tabel tersebut.
  • 8. Penyelesaian dengan Algoritma Brute Force procedure MinMaks1(input A : TabelInt, n : integer, output min, maks : integer) { Mencari nilai minimum dan maksimum di dalam tabel A yang berukuran n elemen, secara brute force. Masukan: tabel A yang sudah terdefinisi elemen-elemennya Keluaran: nilai maksimum dan nilai minimum tabel } Deklarasi i : integer Algoritma: min¬ A1 { inisialisasi nilai minimum} maks¬A1 { inisialisasi nilai maksimum } for i¬2 to n do if Ai < min then min¬Ai endif if Ai > maks then maks¬Ai endif endfor
  • 9. Penyelesaian dengan Divide and Conquer Contoh 4.1. Misalkan tabel A berisi elemen-elemen sebagai berikut: 4 12 23 9 21 1 35 2 24 Ide dasar algoritma secara Divide and Conquer: 4 12 23 9 21 1 35 2 24 DIVIDE 4 12 23 9 21 1 35 2 24 SOLVE: tentukan min & maks pada tiap bagian 4 12 23 9 21 1 35 2 24 min = 4 min = 1 maks = 23 maks = 35 COMBINE 4 12 23 9 21 1 35 2 24 min = 1 maks = 35
  • 10. • Ukuran tabel 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.
  • 11. 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 bandingkan kedua elemen untuk menentukan min dan maks. 2. Untuk kasus n > 2, (a) DIVIDE: Bagi dua tabel 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 if maks1 <maks2 then maks <- maks2 else maks <- maks1
  • 12. Contoh 4.2. Tinjau kembali Contoh 4.1 di atas. DIVIDE dan CONQUER: 4 12 23 9 21 1 35 2 24 4 12 23 9 21 1 35 2 24 4 12 23 9 21 1 35 2 24 SOLVE dan COMBINE: 4 12 23 9 21 1 35 2 24 min = 4 min = 9 min = 1 min = 35 min = 2 maks = 12 maks = 23 maks = 21 maks =35 maks = 24 4 12 23 9 21 1 35 2 24 min = 4 min = 1 min = 2 maks = 23 maks = 21 maks = 35 4 12 23 9 21 1 35 2 24 min = 4 min = 1 maks = 23 maks = 35 4 12 23 9 21 1 5 2 24 min = 1 maks = 35
  • 13. • MinMaks1 secara brute force : T(n) = 2n – 2 • MinMaks2 secara divide and conquer: T(n) = 3n/2 – 2 • Perhatikan: 3n/2 – 2 < 2n – 2 , n ³ 2. • Kesimpulan: algoritma MinMaks lebih mangkus dengan metdoe Divide and Conquer.
  • 14. 2. Algoritma Pengurutan dengan Metode Divide and Conquer procedure Sort(input/output A : TabelInt, input n : integer) { Mengurutkan tabel A dengan metode Divide and Conquer Masukan: Tabel A dengan n elemen Keluaran: Tabel A yang terurut } Algoritma: if Ukuran(A) > 1 then Bagi A menjadi dua bagian, A1 dan A2, masing-masing berukuran n1 dan n2 (n = n1 + n2) Sort(A1, n1) { urut bagian kiri yang berukuran n1 elemen } Sort(A2, n2) { urut bagian kanan yang berukuran n2 elemen } Combine(A1, A2, A) { gabung hasil pengurutan bagian kiri dan bagian kanan } end
  • 15. Contoh: A 4 12 3 9 1 21 5 2 Dua pendekatan (approach) pengurutan: 1. Mudah membagi, sulit menggabung (easy split/hard join) Tabel A dibagidua berdasarkan posisi elemen: Divide: A1 4 12 3 9 A2 1 21 5 2 Sort: A1 3 4 9 12 A2 1 2 5 21 Combine: A1 1 2 3 4 5 9 12 21 Algoritma pengurutan yang termasuk jenis ini: a. urut-gabung (Merge Sort) b. urut-sisip (Insertion Sort)
  • 16. 2. Sulit membagi, mudah menggabung (hard split/easy join) Tabel A dibagidua berdasarkan nilai elemennya. Misalkan elemen-elemen A1 £ elemen-elemen A2. Divide: A1 4 2 3 1 A2 9 21 5 12 Sort: A1 1 2 3 4 A2 5 9 12 21 Combine: A 1 2 3 4 5 9 12 21 Algoritma pengurutan yang termasuk jenis ini: a. urut-cepat (Quick Sort) b. urut-seleksi (Selection Sort)
  • 17. (a) Merge Sort Algoritma: 1. Untuk kasus n = 1, maka tabel A sudah terurut dengan sendirinya (langkah SOLVE). 2. Untuk kasus n > 1, maka (a) DIVIDE: bagi tabel A menjadi dua bagian, bagian kiri dan bagian kanan, masing-masing bagian berukuran n/2 elemen. (b) CONQUER: Secara rekursif, terapkan algoritma D-and-C pada masing-masing bagian. (c) MERGE: gabung hasil pengurutan kedua bagian sehingga diperoleh tabel A yang terurut.
  • 18. Contoh Merge: A1 A2 B 1 13 24 2 15 27 1 < 2 ® 1 1 1 13 24 2 15 27 2 <13 ® 2 1 2 1 13 24 2 15 27 13<15®13 1 2 13 1 13 24 2 15 27 15<24®15 1 2 13 15 1 13 24 2 15 27 24<27®24 1 2 13 15 24 1 13 24 2 15 27 27 ® 1 2 13 15 24 27
  • 19. Contoh 4.3. Misalkan tabel A berisi elemen-elemen berikut: 4 12 23 9 21 1 5 2 DIVIDE, CONQUER, dan SOLVE: 4 12 23 9 21 1 5 2 4 12 23 9 21 1 5 2 4 12 23 9 21 1 5 2 4 12 23 9 21 1 5 2 MERGE: 4 12 9 23 1 21 2 5 4 9 12 23 1 2 5 21 1 2 4 5 9 12 21 23
  • 20. procedure MergeSort(input/output A : TabelInt, input i, j : integer) { Mengurutkan tabel A[i..j] dengan algoritma Merge Sort Masukan: Tabel A dengan n elemen Keluaran: Tabel A yang terurut } Deklarasi: k : integer Algoritma: if i < j then { Ukuran(A)> 1} k¬(i+j) div 2 MergeSort(A, i, k) MergeSort(A, k+1, j) Merge(A, i, k, j) endif
  • 21. Prosedur Merge: procedure Merge(input/output A : TabelInt, input kiri,tengah,kanan : integer) { Menggabung tabel A[kiri..tengah] dan tabel A[tengah+1..kanan] menjadi tabel A[kiri..kanan] yang terurut menaik. Masukan: A[kiri..tengah] dan tabel A[tengah+1..kanan] yang sudah terurut menaik. Keluaran: A[kiri..kanan] yang terurut menaik. } Deklarasi B : TabelInt i, kidal1, kidal2 : integer Algoritma: kidal1¬kiri { A[kiri .. tengah] } kidal2¬tengah + 1 { A[tengah+1 .. kanan] } i¬kiri while (kidal1 £ tengah) and (kidal2 £ kanan) do if Akidal1 £ Akidal2 then Bi¬A kidal1 kidal1¬k idal1 + 1 else Bi¬A kidal2 kidal2¬k idal2 + 1 endif i¬i + 1 endwhile { kidal1 > tengah or kidal2 > kanan } { salin sisa A bagian kiri ke B, jika ada } while (kidal1 £ tengah) do Bi¬A kidal1 kidal1¬k idal1 + 1 i¬i + 1 endwhile { kidal1 > tengah } { salin sisa A bagian kanan ke B, jika ada } while (kidal2 £ kanan) do Bi¬A kidal2 kidal2¬k idal2 + 1 i¬i + 1 endwhile { kidal2 > kanan } { salin kembali elemen-elemen tabel B ke A } for i¬kiri to kanan do Ai¬B i endfor { diperoleh tabel A yang terurut membesar }
  • 22. · Kompleksitas waktu: Asumsi: n = 2k T(n) = jumlah perbandingan pada pengurutan dua buah upatabel + jumlah perbandingan pada prosedur Merge
  • 23. Penyelesaian: T(n) = 2T(n/2) + cn = 2(2T(n/4) + cn/2) + cn = 4T(n/4) + 2cn = 4(2T(n/8) + cn/4) + 2cn = 8T(n/8) + 3cn = ... = 2k T(n/2k) +kcn Berhenti jika ukuran tabel terkecil, n = 1: n/2k = 1 ® k = 2log n sehingga T(n) = nT(1) + cn 2log n = na + cn 2log n = O(n 2log n)
  • 24. (b) Insertion Sort procedure InsertionSort(input/output A : TabelInt, input i, j : integer) { Mengurutkan tabel A[i..j] dengan algoritma Insertion Sort. Masukan: Tabel A dengan n elemen Keluaran: Tabel A yang terurut } Deklarasi: k : integer Algoritma: if i < j then { Ukuran(A)> 1} k¬i InsertionSort(A, i, k) InsertionSort(A, k+1, j) Merge(A, i, k, j) endif
  • 25. Perbaikan: procedure InsertionSort(input/output A : TabelInt, input i, j : integer) { Mengurutkan tabel A[i..j] dengan algoritma Insertion Sort. Masukan: Tabel A dengan n elemen Keluaran: Tabel A yang terurut } Deklarasi: k : integer Algoritma: if i < j then { Ukuran(A)> 1} k¬i Insertion(A, k+1, j) Merge(A, i, k, j) endif Prosedur Merge dapat diganti dengan prosedur penyisipan sebuah elemen pada tabel yang sudah terurut (lihat algoritma Insertion Sort versi iteratif).
  • 26. Contoh 4.4. Misalkan tabel A berisi elemen-elemen berikut: 4 12 23 9 21 1 5 2 DIVIDE, CONQUER, dan SOLVE:: 4 12 3 9 1 21 5 2 4 12 3 9 1 21 5 2 4 12 3 9 1 21 5 2 4 12 3 9 1 21 5 2 4 12 3 9 1 21 5 2 4 12 3 9 1 21 5 2 4 12 3 9 1 21 5 2 4 12 3 9 1 21 5 2 4 12 3 9 1 21 5 2
  • 27. MERGE: 4 12 3 9 1 21 5 2 3 4 12 9 1 21 5 2 3 4 9 12 1 21 5 2 1 3 4 9 12 21 5 2 1 3 4 9 12 21 5 2 1 3 4 5 9 12 21 2 1 2 3 4 5 9 12 21
  • 28. Kompleksitas waktu algoritma Insertion Sort: Penyelesaian: T(n) = cn + T(n – 1) = cn + { c × (n – 1) + T(n – 2) } = cn + c(n – 1) + { c × (n – 2) + T(n – 3) } = cn + c × (n – 1) + c × (n – 2) + {c(n – 3) + T(n – 4) } = ... = cn + c × (n – 1) + c(n – 2) + c(n – 3) + ... + c2 + T(1) = c{ n + (n – 1) + (n – 2) + (n – 3) + ... + 2 } + a = c{ (n – 1)(n + 2)/2 } + a = cn2/2 + cn/2 + (a – c ) = O(n2)