Divide and Conquer — Algoritma

Divide and Conquer memecah masalah besar menjadi sub-masalah yang lebih kecil, menyelesaikan masing-masing secara independen, lalu menggabungkan hasilnya. 3 lan

Divide and Conquer memecah masalah besar menjadi sub-masalah yang lebih kecil, menyelesaikan masing-masing secara independen, lalu menggabungkan hasilnya.

3 langkah:

  1. Divide — pecah masalah jadi sub-masalah
  2. Conquer — selesaikan sub-masalah (rekursif)
  3. Combine — gabungkan hasil

Kamu sudah melihat D&C di:

Contoh: Maximum subarray (Kadane vs D&C)

// D&C approach — O(n log n)
function maxSubarrayDC(arr, left = 0, right = arr.length - 1) {
  if (left === right) return arr[left];

  const mid = Math.floor((left + right) / 2);

  const leftMax = maxSubarrayDC(arr, left, mid);
  const rightMax = maxSubarrayDC(arr, mid + 1, right);
  const crossMax = maxCrossingSum(arr, left, mid, right);

  return Math.max(leftMax, rightMax, crossMax);
}

function maxCrossingSum(arr, left, mid, right) {
  let leftSum = -Infinity, sum = 0;
  for (let i = mid; i >= left; i--) {
    sum += arr[i];
    leftSum = Math.max(leftSum, sum);
  }

  let rightSum = -Infinity;
  sum = 0;
  for (let i = mid + 1; i <= right; i++) {
    sum += arr[i];
    rightSum = Math.max(rightSum, sum);
  }

  return leftSum + rightSum;
}

Contoh: Power function — O(log n)

// Biasa: 2^10 = 2*2*2*2*2*2*2*2*2*2 → 10 operasi
// D&C:  2^10 = (2^5)^2 → 2^5 = (2^2)^2 * 2 → jauh lebih sedikit
function power(base, exp) {
  if (exp === 0) return 1;
  if (exp % 2 === 0) {
    const half = power(base, exp / 2);
    return half * half;
  }
  return base * power(base, exp - 1);
}

D&C vs DP:

🎭 Analogi sehari-hari: Mau angkat batu besar berdua. Susah. Bagi jadi 2 batu kecil — masing-masing diangkat satu orang. Lebih mudah. Kalau masih berat, bagi lagi. Setelah masing-masing diangkat, gabungkan ke truk. Itulah Divide & Conquer.

💡 Master Theorem (intuisi): Jika T(n) = a × T(n/b) + O(n^c) (a sub-masalah, masing-masing n/b, combine O(n^c)):

Mengapa Merge Sort O(n log n)? a=2, b=2, c=1, log₂2=1=c → n^1 × log n = n log n.

⚠️ Jebakan umum:

🎯 Pola "ini D&C":

🧪 Tebakan cepat: Power 2^20 naive O(20) ops. D&C: log₂20 ≈ 5 calls. 4x lebih sedikit untuk n kecil, 1000x untuk n besar.

TL;DR: Divide & Conquer = bagi → recurse → combine. Powerful kalau subproblem independen. Master Theorem analyze complexity. Foundation merge/quick sort, binary search, dan banyak optimasi log n.