Có lẽ tôi đang ngây thơ hoặc mắc sai lầm ở đây, nhưng tôi nghĩ rằng đó không phải là quá khó (mặc dù không rõ ràng) để thấy rằng thuật toán thực sự là tối ưu.
Giả sử bạn có phân vùng tối ưu của danh sách có số lượng danh sách phụ tối đa. Bạn có thể hoặc không có tất cả các phần tử trong danh sách, nhưng vì việc thêm một phần tử vào danh sách hợp lệ sẽ tạo ra một danh sách hợp lệ, giả sử rằng bất kỳ phần tử "còn lại" nào ban đầu không được gán cho bất kỳ danh sách con nào được gán tùy ý một trong các danh sách con liền kề của nó; vì vậy chúng tôi có phân vùng tối ưu thích hợp của danh sách, chúng tôi sẽ gọi P1.
Bây giờ hãy nghĩ về phân vùng mà thuật toán tham lam sẽ tạo ra, nói P2. Có hai điều có thể xảy ra cho sublist đầu tiên trong P2:
- Nó có thể giống như các sublist đầu tiên trong P1.
- Nó có thể ngắn hơn danh sách con đầu tiên trong P1.
Trong 1. bạn sẽ lặp lại lý do bắt đầu trong phần tử tiếp theo sau danh sách con đầu tiên. Nếu mỗi danh sách con tiếp theo được tạo ra bởi thuật toán bằng với P1, thì P1 và P2 sẽ bằng nhau.
Trong 2. bạn cũng sẽ lặp lại lý do, nhưng bây giờ bạn có ít nhất một mục "phụ" khả dụng. Vì vậy, một lần nữa, danh sách phụ tiếp theo có thể:
2.1. Nhận được như xa như các sublist tiếp theo trong P1.
2.2. Kết thúc trước danh sách con tiếp theo trong P1.
Và lặp lại. Vì vậy, trong mọi trường hợp, bạn sẽ có ít nhất ít nhất là nhiều danh sách con dưới dạng P1. Có nghĩa là, P2 là ít nhất là tốt như mọi phân vùng có thể có trong danh sách và đặc biệt là bất kỳ phân vùng tối ưu nào.
Nó không phải là một cuộc biểu tình rất chính thức, nhưng tôi nghĩ rằng nó hợp lệ. Hãy chỉ ra bất cứ điều gì bạn nghĩ có thể sai.
Mẫu bình thường để chứng minh thuật toán tham lam tối ưu là (1) đặt ra trường hợp tham lam không tạo ra kết quả tối ưu; (2) nhìn vào vị trí đầu tiên mà giải pháp của nó và giải pháp tối ưu phân kỳ; và (3) chứng minh rằng nơi đó không thể tồn tại. Bằng chứng là mâu thuẫn. – Sneftel
Với tôi, có vẻ như yêu cầu * tiếp giáp đó đã loại bỏ mọi tính linh hoạt có ý nghĩa khỏi giải pháp của vấn đề này. I E. giải pháp là hiển nhiên và đơn giản: chỉ tích lũy một phân vùng từ đầu cho đến khi bạn nhận được 'K' và sau đó bắt đầu một phân vùng mới. Sự linh hoạt duy nhất nó cho phép là tiếp tục mở rộng phân vùng hiện tại khi tổng của nó đã là 'K', nhưng rõ ràng điều này sẽ chỉ làm giảm chất lượng của giải pháp. – AnT
@AndreyT Đó là trực giác của bạn và bạn có thể đúng nhưng tôi không nghĩ đó là đủ bằng chứng. – NPS