Hướng dẫn giải của Xây chuồng cao tầng
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Lời giải: Xây chuồng cao tầng
Hướng tiếp cận
Bài toán yêu cầu phân bổ con bò vào tầng (mỗi tầng ít nhất 1 bò) sao cho tổng nhỏ nhất. Đây là bài toán tối ưu phân bổ tài nguyên với hàm lợi ích giảm dần.
Nhận xét quan trọng
Lợi ích biên giảm dần: Khi thêm bò thứ vào tầng , lợi ích (giảm thời gian) là . Giá trị này giảm dần khi tăng.
Tham lam thông thường quá chậm: Cách tham lam "luôn thêm bò vào tầng có lợi ích biên lớn nhất" đúng nhưng có độ phức tạp , quá chậm khi lên đến .
Tìm kiếm nhị phân trên lợi ích biên: Thay vì thêm từng bò, ta tìm kiếm nhị phân trên giá trị - lợi ích biên nhỏ nhất mà ta chấp nhận khi thêm bò. Với mỗi giá trị , ta tính được số bò tối đa có thể phân bổ sao cho mọi bò đều có lợi ích biên .
Thuật toán
Tìm kiếm nhị phân trên giá trị thực (lợi ích biên ngưỡng):
- Với mỗi tầng , tìm số bò lớn nhất sao cho , tức là lợi ích biên của bò thứ vẫn .
- Giải bất phương trình: , suy ra .
- Tổng cho biết số bò cần dùng. Nếu thì tăng , ngược lại giảm .
Xử lý sau tìm kiếm nhị phân:
- Sau khi hội tụ, ta có ngưỡng và phân bổ ban đầu cho mỗi tầng.
- Nếu tổng , ta có dư bò. Các bò dư được thêm vào các tầng có lợi ích biên đúng bằng (tức ).
- Nếu tổng , ta bớt bò ở các tầng có lợi ích biên bằng .
Tính kết quả: Tổng , làm tròn đến số nguyên gần nhất.
Độ phức tạp
- Thời gian: với là khoảng tìm kiếm nhị phân (khoảng vòng lặp cho số thực), tức .
- Bộ nhớ:
Bình luận