Đầu tiên, chúng tôi có thể chuyển đổi hình chữ nhật nguồn của bạn thành các ô trong lưới bên dưới của bạn, để làm cho đầu vào đồng đều hơn. (Hiệu quả khắc phục sự cố)
Điều này sẽ cho phép chúng tôi tìm thấy các tối ưu hóa có thể không rõ ràng khi làm việc trực tiếp với các hình chữ nhật nguồn - đặc biệt khi nó liên quan đến việc chia nhiều hình chữ nhật nguồn để kết hợp lại chúng theo cách khác nhau.
Tiếp theo, chúng ta có thể tìm thấy các khu vực được kết nối có cùng màu, sử dụng thuật toán tìm kiếm theo chiều sâu hoặc tìm kiếm ngập lụt. Chúng ta có thể xem xét từng khu vực được kết nối (một polyomino ) một cách cô lập - không có gì chúng ta làm với một khu vực khác cần phải ảnh hưởng đến khu vực này.
Thực tế, chúng tôi muốn tìm cách phân tích polyomino này thành hình chữ nhật (tiếc là hầu hết các tài liệu tôi có thể tìm thấy là về vấn đề ngược lại: mổ xẻ hình chữ nhật thành đa hình! Điều này khiến cho việc tìm kiếm khách hàng tiềm năng trở nên khó khăn ...)
Một phương pháp đơn giản là kết hợp các đường ngang của các hình vuông liền kề thành các hình chữ nhật dài. Sau đó, chúng ta có thể so sánh với hàng ở trên và kết hợp nếu lần chạy và kết thúc của chúng ta khớp với nhau - khi chúng ta kết thúc mỗi lần chạy / hàng hoặc khi chúng ta xem xét từng ô để thêm vào lần chạy hiện tại.
Tôi không biết làm thế nào gần phương pháp này đạt đến tối ưu. Có vẻ như nó có thể gặp một chút rắc rối khi một hàng mà nó chưa xem xét cho thấy sự phân chia khác với các hàng mà nó đã thấy cho đến nay:
Phát hiện khi chạy / hình chữ nhật được bao phủ chính xác bằng cách chạy bên trên & bên dưới, sau đó tách nó và hợp nhất chúng sẽ giải quyết trường hợp cụ thể này, nhưng tôi chưa khám phá vấn đề chung như thế nào.
Tôi cũng đã xem xét các phương pháp mà chúng ta đi theo chu vi của polyomino và cắt ngang bất cứ khi nào chúng ta gặp một góc lõm, nhưng cách tiếp cận này có vẻ dễ bị lỗi hơn đối với tôi. Để có kết quả tối ưu dường như yêu cầu các ưu tiên cắt giảm tham gia hai góc lõm và hình dạng chứa các hốc cần xử lý đặc biệt, vì vậy phương pháp quét hàng dường như có lợi thế đơn giản.
Một phương pháp nữa tôi đang tìm kiếm là thực hiện lần chạy đầu tiên được tìm thấy ở hàng trên cùng và kéo dài nó xuống hết mức có thể. Sau đó, chạy lần đầu tiên ở hàng trên cùng của những gì còn lại ... Điều này được tăng gấp ba lần trên các hình chữ T ngược, vì vậy nó cũng không tối ưu.
Tôi cảm thấy có lẽ có một cách để sử dụng lập trình động để tìm ra sự phân chia tối ưu, nhưng tôi chưa tìm thấy nó.