Đối với câu hỏi đầu tiên của bạn, trực giác đằng sau phân chia và chinh phục là trong nhiều vấn đề, số lượng công việc phải được thực hiện dựa trên một số thuộc tính tổ hợp của đầu vào có tỷ lệ lớn hơn tuyến tính. Ví dụ, trong cặp vấn đề điểm gần nhất, thời gian chạy câu trả lời brute-force được xác định bởi thực tế là bạn phải xem xét tất cả các cặp điểm (O).
Nếu bạn lấy thứ gì đó phát triển bậc hai và cắt thành hai phần, mỗi phần có kích thước bằng một nửa so với trước, phải mất một phần tư thời gian đầu để giải quyết vấn đề trong mỗi nửa, để giải quyết vấn đề ở cả hai một nửa mất khoảng một nửa thời gian cần thiết cho giải pháp lực lượng vũ phu. Cắt nó thành bốn mảnh sẽ mất một phần tư thời gian, cắt nó thành tám miếng một phần tám thời gian, vv
Phiên bản đệ quy kết thúc nhanh hơn trong trường hợp này bởi vì ở mỗi bước, chúng ta tránh làm rất nhiều làm việc để đối phó với các cặp yếu tố bằng cách đảm bảo rằng không có quá nhiều cặp mà chúng ta thực sự cần phải kiểm tra. Hầu hết các thuật toán có giải pháp phân chia và chinh phục sẽ nhanh hơn vì lý do tương tự.
Đối với câu hỏi thứ hai của bạn, không, phân chia và chinh phục các thuật toán không nhất thiết phải nhanh hơn thuật toán brute-force. Xem xét vấn đề tìm giá trị lớn nhất trong một mảng. Thuật toán brute-force mất thời gian O (n) và sử dụng không gian O (1) vì nó thực hiện quét tuyến tính trên dữ liệu. Thuật toán phân chia và conquer được cung cấp tại đây:
- Nếu mảng chỉ có một phần tử, đó là giá trị tối đa.
- Nếu không:
- Cut mảng một nửa.
- Tìm mức tối đa trong mỗi nửa.
- Tính toán tối đa hai giá trị này.
này đòi hỏi thời gian O (n) là tốt, nhưng sử dụng O (log n) bộ nhớ cho không gian ngăn xếp. Nó thực sự tồi tệ hơn so với thuật toán tuyến tính đơn giản.
Ví dụ khác, maximum single-sell profit problem có giải pháp phân chia và chinh phục, nhưng giải pháp lập trình động được tối ưu hóa nhanh hơn trong cả thời gian và bộ nhớ.
Hy vọng điều này sẽ hữu ích!
Để chia sẻ bánh thành 16 miếng, giải pháp đầu tiên là cố gắng cắt 1/16 bánh và vân vân ... khó. Một giải pháp khác là cắt bánh trong 2, sau đó trong 2 lần nữa, sau đó mỗi của 1/4 trong 2, và mỗi 1/8 trong 2. –