Lesson 17 — Chia để trị (Divide & Conquer)
1. Cây Divide & Conquer — Maximum Subarray O(n log n)
Bài toán: tìm đoạn con liên tiếp có tổng lớn nhất. D&C cắt đôi tại mid, đoạn tối ưu nằm ở 1 trong 3 chỗ: hoàn toàn trái, hoàn toàn phải, hoặc xuyên giữa. Bấm Bước tiếp để xem chia đôi rồi combine.
Mỗi node = một lời gọi maxSubarrayDC(lo, hi). Số trong node là kết quả max của đoạn đó. Combine = max(trái, phải, xuyên giữa).
2. Fast Power — chia đôi mũ O(log n)
Tính x^n không bằng n−1 phép nhân, mà bằng chia đôi mũ: x^n = (x^(n/2))² (n chẵn) hoặc x·(x^(n/2))² (n lẻ). Nhị phân của n quyết định các lũy thừa cần nhân: 13 = 1101₂ → x¹³ = x⁸·x⁴·x¹.
3. D&C vs DP — độc lập hay chồng lấp? paradigm
Khác biệt sống còn: subproblem của D&C độc lập (mỗi node giải 1 lần, cây nở không trùng) vs subproblem của DP chồng lấp (cùng bài con lặp lại nhiều nhánh → cần memo). Chọn ví dụ để so sánh cây đệ quy.