Оптимальный способ разделения фигуры на основе ячейки на минимальное количество прямоугольников

Предположим, логический массив, как:

1111
1111
1110
1111
1001

Теперь вам нужно найти способ расстановки наименьших прямоугольников любого размера для достижения этой формы. Так, например, вы найдете это:

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

Где + - угол прямоугольника, а |, - границы прямоугольника.

Я подумал о том, чтобы начать с самого большого прямоугольника, проверяя, есть ли место в массиве, в которое он может быть помещен, где каждый элемент массива, охватываемый прямоугольником, имеет значение true. Если такое место существует, прямоугольник будет добавлен в список. После этого мы проверяем в левом пространстве массива, есть ли другое место для помещения прямоугольника, затем уменьшаем размер прямоугольника и повторяем процесс с оставшимся пространством, пока размер не станет равным 0.

Это должно дать хорошие результаты, так как мы всегда начинаем с больших прямоугольников, которые мы, конечно, можем использовать меньше, что, в свою очередь, означает, что мы используем небольшое количество прямоугольников.

Тем не менее, это всего лишь концепция, о которой я подумал и которую еще не применил на практике. Это кажется довольно неэффективным, поэтому мне было интересно, есть ли какие-нибудь известные быстрые алгоритмы для достижения этой цели?

Ответы на вопрос(4)

Ваш ответ на вопрос