My first Magazine pemrograman-kompetitif-dasar | Page 65
5.4 Studi Kasus 3: Mencari Nilai Terbesar
Pertama kita definisikan tahap-tahapnya:
• Divide : jika array berukuran besar (lebih dari satu elemen), bagi menjadi dua subarray .
Kemudian, lakukan pencarian secara rekursif pada masing-masing subarray tersebut.
• Conquer : ketika array hanya berisi satu elemen, nilai terbesarnya pasti adalah elemen
tersebut.
• Combine : nilai terbesar dari array adalah maksimum dari nilai terbesar di subarray pertama
dan nilai terbesar di subarray kedua.
Implementasi Pencarian Nilai Terbesar
Ide pencarian nilai terbesar secara divide and conquer terdapat di Algoritma 25.
Algoritma 25 Pencarian nilai terbesar secara divide and conquer .
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function FIND M AX (arr, le f t, right)
if le f t = right then
return arr[le f t]
else
mid ← (le f t + right) div 2
le f tMax ← FIND M AX (arr, le f t, mid)
rightMax ← FIND M AX (arr, mid + 1, right)
return max(le f tMax, rightMax)
end if
end function
Analisis Algoritma Mencari Nilai Terbesar
O(1)
O(1)
O(1)
O(1)
O(1)
O(1)
O(1)
O(1)
O(1)
O(1)
O(1)
O(1)
O(1)
O(1) O(1)
Gambar 5.34: Pembagian dan kompleksitas untuk menyelesaikan tiap subarray .
Setiap operasi divide, conquer, dan combine bekerja dalam O(1). Pada tiap kedalaman,
kompleksitas yang dibutuhkan adalah sebanyak subarray pada kedalaman tersebut. Kedalaman
ke-i (dimulai dari 1) memiliki banyak subarray sebanyak 2 i−1 . Sehingga kedalaman ke-1 memiliki
2 0 = 1 subarray , kedalaman ke-2 memiliki 2 1 = 2 subarray , kedalaman ke-3 memiliki 2 2 = 4
subarray , dan seterusnya.
Maka operasi conquer dilaksanakan sebanyak 1 + 2 + 4 + 8 + ... + 2 L kali, dengan L adalah
banyak kedalaman rekursif dari pembagian array , yaitu L = log N. Dengan 2 L ≈ N, keseluruhan
total operasi adalah 1 + 2 + 4 + 8 + ... + 2 L = 2 L+1 − 1 = 2N operasi. Kompleksitas akhirnya menjadi
O(N).
Ternyata, strategi ini tidak lebih baik dari mencari nilai maksimum satu per satu menggunakan
perulangan. Kesimpulannya, divide and conquer tidak selalu dapat mengurangi kompleksitas
solusi naif.
55