Optymalny sposób podziału kształtu opartego na komórkach na minimalną liczbę prostokątów

Załóż tablicę logiczną taką jak:

1111
1111
1110
1111
1001

Teraz musisz znaleźć sposób na ułożenie najmniejszych prostokątów o dowolnym rozmiarze, aby osiągnąć ten kształt. Na przykład znajdziesz to:

+-++
| |+
| |
+-++
+  +

Gdzie + to róg prostokąta i |, - granice prostokąta.

To, co myślałem o zrobieniu, to rozpoczęcie od największego możliwego prostokąta, sprawdzenie, czy w tablicy znajduje się jakiekolwiek miejsce, w którym można go umieścić, gdzie każdy element tablicy objęty prostokątem jest prawdziwy. Jeśli takie miejsce istnieje, prostokąt zostanie dodany do listy. Następnie sprawdzamy w lewym polu tablicy, czy jest inne miejsce do umieszczenia prostokąta, a następnie zmniejszamy rozmiar prostokąta i powtarzamy proces z pozostałą przestrzenią, aż rozmiar będzie równy 0.

Powinno to dać dobre wyniki, ponieważ zawsze zaczynamy od dużych prostokątów, które możemy - oczywiście - użyć mniej, co z kolei oznacza, że ​​używamy małych ilości prostokątów.

Jednak jest to tylko koncepcja, o której myślałem, a której jeszcze nie wprowadziłem w życie. Wydaje się to dość nieefektywne, więc zastanawiałem się, czy istnieją jakieś znane szybkie algorytmy do osiągnięcia tego celu?

questionAnswers(4)

yourAnswerToTheQuestion