Jak rozmieścić N prostokątów, aby pokryć minimalną powierzchnię [duplikat]

Możliwy duplikat:
Algorytm potrzebny do pakowania prostokątów w dość optymalny sposób

mamN prostokąty, każdy o losowym rozmiarze (losowa szerokość i wysokość). Wszystkie prostokąty są równoległe do osi X i Y. Szukam algorytmu, który pomaga mi układać te prostokąty obok siebie w taki sposób, że wynikowy prostokąt ograniczający ma minimalną powierzchnię, a potencjalne przerwy wokół / pomiędzy wejściowymi prostokątami są tak małe, jak to możliwe. Prostokąty nie mogą być obracane i nie mogą się nakładać.

(Potrzebuję ich, aby zautomatyzować aranżację ikonek, dzięki czemu mogę tworzyć arkusze sprite i zapisywać lokalizacje sprite z różnych obrazów, które otrzymuję od animatorów).

Na przykład:

+---+   +----------+
| 1 |   |    2     |
+---+   +----------+                 +----------+..           +---+----------+
                                     |    2     |..           | 1 |    2     |
+--------+                ===>       +--------+-+-+    vs     +---+----+-----+
|        |                           |        | 1 |           |        |......
|    3   |                           |    3   +---+           |    3   |......
+--------+                           +--------+....           +--------+......

                                       Unused: 8                 Unused: 18

Niewykorzystane miejsce jest oznaczone kropkami (.) Na rysunku. Ponieważ pierwszy wynik ma prostokąt ograniczający z mniejszą nieużywaną przestrzenią, lepiej znaleźć ten układ wejściowych prostokątów.

Czy istnieje już algorytm, który w tym pomaga? Zrobiłem dużo googlingu, ale większość wyników wiąże się ze znalezieniem minimalnego prostokąta ograniczającego lub znalezieniem, czy N prostokątów pokrywa wcześniej określony obszar.

questionAnswers(1)

yourAnswerToTheQuestion