Khi nói đến việc thiết kế các thuật toán, người ta thường sử dụng các kỹ thuật sau:
- Lập trình năng động
- Chiến lược tham lam
- Phân chia và chinh phục
Trong khi đối với hai phương pháp đầu tiên, có những nền tảng lý thuyết nổi tiếng, đó là Nguyên lý tối ưu Bellman và lý thuyết matroid (resp. Greedoid), tôi không thể tìm thấy một khuôn khổ chung như vậy cho các thuật toán dựa trên D & C.
Đầu tiên, tôi nhận thức được một thứ mà chúng tôi (hay đúng hơn là prof) đã giới thiệu trong một lớp lập trình chức năng, được gọi là "bộ xương thuật toán", phát sinh trong bối cảnh của các tổ hợp. Lấy ví dụ ở đây, chúng tôi đã đưa ra một bộ xương như vậy cho các thuật toán D & C như sau:
Định nghĩa : Đặt là các tập hợp không rỗng. Chúng tôi gọi các phần tử của các giải pháp và các phần tử của (nghĩa là các tập con của ) được gọi là các vấn đề . Sau đó, bộ xương D & C là 4-tuple , trong đó:S P : = P ( A ) Một ( P β , β , D , C )
- p P β ( p ) là một vị ngữ trong tập hợp các vấn đề và chúng tôi nói rằng một vấn đề là iff cơ bản .
- P β → S là ánh xạ chỉ định một giải pháp cho từng vấn đề cơ bản.
- P → P ( P ) là ánh xạ chia mỗi vấn đề thành một tập hợp các bài toán con.
- là ánh xạ tham gia các giải pháp (tùy thuộc vào loại "vấn đề trục") của các bài toán con để tạo ra giải pháp.
Sau đó, với một bộ xương đã cho và một vấn đề , hàm chung sau đây tính toán một giải pháp (chính thức ý nghĩa) cho :p f s : P → S p
trong đó trong dòng thứ hai, chúng tôi sử dụng ký hiệu cho các tập con của tên miền của ánh xạ .X f
Tuy nhiên, chúng tôi đã không kiểm tra thêm các thuộc tính "cấu trúc" cơ bản của các vấn đề có thể được xây dựng theo cách này (như tôi đã nói, đó là một lớp lập trình chức năng và đây chỉ là một ví dụ nhỏ). Thật không may, tôi không thể tìm thấy tài liệu tham khảo thêm về chính phương pháp này. Do đó tôi không nghĩ các định nghĩa trên là khá chuẩn. Nếu ai đó nhận ra những gì tôi đã nêu ở trên, tôi sẽ vui mừng về các bài viết liên quan.
Thứ hai, đối với chiến lược tham lam, chúng ta có một kết quả nổi tiếng là một vấn đề được giải quyết chính xác bằng thuật toán tham lam chung nếu và chỉ khi các giải pháp của nó tạo thành một matroid có trọng số. Có kết quả tương tự cho các thuật toán D & C (không nhất thiết phải dựa trên phương pháp được nêu ở trên)?