Đơn giản, tôi phải giải quyết vấn đề sau:Thuật toán để tìm số hình chữ nhật tối thiểu bao gồm các phần tử nhất định trong mảng 2d
Bạn có mảng 2 chiều có 0 và 1. Tìm số lượng hình chữ nhật tối thiểu sao cho chúng bao trùm tất cả 1s. Hình chữ nhật không được chồng lên nhau.
Chữ ký chức năng có thể trông giống như: List<Rectangle> FindCoveringRectangles(bool[,] array)
Tôi đã có một giải pháp đó là "đủ tốt", nhưng không phải lúc nào tìm ra số lượng tối thiểu của hình chữ nhật. Tôi muốn biết nếu có một số thuật toán nổi tiếng và hiệu quả có thể được áp dụng để giải quyết vấn đề này?
Ví dụ:
Một mảng đầu vào của:
..........
.1.....11.
.......11.
...111....
...111....
...111....
....1111..
....1111..
......11..
..........
(0s thay thế bằng dấu chấm cho dễ đọc)
Có thể dẫn đến việc hình chữ nhật sau:
(2,2,2,2),
(2,8,3,9),
(4,4,6,6),
(7,5,8,8),
(9,7,9,8)
(top , trái, dưới, phải), 1 dựa trên
Có thể có nhiều hơn một giải pháp, nhưng một là đủ.
Nếu bạn cho chúng tôi biết thuật toán xấp xỉ của bạn, có lẽ chúng tôi có thể giúp cải thiện nó trong trường hợp xấu nhất. –
Bạn đang cố gắng tối ưu hóa điều gì? Số lượng hình chữ nhật tối thiểu luôn là 1. – ThomasMcLeod
Sự cố này được giải quyết một cách xuất sắc trong ngữ cảnh của [bản đồ Karnaugh] (http://en.wikipedia.org/wiki/Karnaugh_map). – thiton