đưa ra một m ma trận n * với các giá trị có thể có của 1, 2 và null:tìm thấy tất cả các lĩnh vực hình chữ nhật với tính chất nhất định trong một ma trận
. . . . . 1 . .
. 1 . . . . . 1
. . . 2 . . . .
. . . . 2 . . .
1 . . . . . 1 .
. . . . . . . .
. . 1 . . 2 . .
2 . . . . . . 1
Tôi đang tìm kiếm cho tất cả các khối B (chứa tất cả các giá trị giữa (x0, y0) và (x1, y1)) rằng:
- chứa ít nhất một '1'
- không chứa '2'
- không phải là một tập hợp con của một khối khác với các thuộc tính trên
Ví dụ:
Khu vực màu đỏ, xanh lá cây và màu xanh tất cả đều chứa một '1', không '2', và không phải là một phần của một khu vực lớn hơn. Có tất nhiên hơn 3 khối như vậy trong ảnh này. Tôi muốn tìm tất cả các khối này.
cách nhanh chóng để tìm tất cả các khu vực này là gì?
Tôi có giải pháp brute-force làm việc, lặp qua tất cả các hình chữ nhật có thể, kiểm tra xem chúng có đáp ứng được hai tiêu chí đầu tiên không; sau đó lặp qua tất cả các hình chữ nhật tìm thấy, loại bỏ tất cả các hình chữ nhật được chứa trong một hình chữ nhật khác; và tôi có thể tăng tốc độ đó bằng cách trước tiên loại bỏ các hàng và cột giống nhau liên tiếp. Nhưng tôi khá chắc chắn rằng có một cách nhanh hơn nhiều.
Tất cả các cạnh của các khối này sẽ nằm ở cạnh của biểu đồ hoặc tiếp giáp với "2". Có lẽ bạn có thể làm điều gì đó với điều đó. – robert
Nếu bạn không nhận được câu trả lời hay ở đây, bạn cũng có thể yêu cầu nó trong http://cs.stackexchange.com. –