Stacking rectangles to take as little space as possible

后端 未结 3 675
眼角桃花
眼角桃花 2020-12-06 01:38

I have a program that will calculate the minimal area taken by fitting rectangles together.

Input: Rectangles of different height and width.
Output: One rectangl

相关标签:
3条回答
  • 2020-12-06 02:10

    I'd recommend starting with a simple greedy approach, and seeing if that is good enough for your needs. If your input is well-behaved or small, that may be all you need--and the complexity will go up quickly when you try to do something more sophisticated.

    For example: sort the rectangles by size, largest first. Add the rectangles one at a time, trying each possible position for the new rectangle. Pick the position that results in the smallest bounding box.

    Another greedy approach would be to pick a starting rectangle, then repeatedly add the rectangle which results in the most dense arrangement (where density is defined as the percentage of the bounding box's area that is filled).

    0 讨论(0)
  • 2020-12-06 02:19

    http://www-rcf.usc.edu/~skoenig/icaps/icaps04/icapspapers/ICAPS04KorfR.pdf

    Apparently this problem is harder than it looks at first. It's an interesting algorithm, since first it guesses a solution and then improves on it, so if you don't want to wait for the optimal solution, you can just run it for a set number of iterations to get an approximate solution (the longer you run it, the better the approximation).

    0 讨论(0)
  • 2020-12-06 02:20

    I'd start by skimming through http://mathworld.wolfram.com - they're awesome for stuff like this.

    Second, I could envision a dopey algorithm that would put the longest (in the X dimension) box on the bottom, then the tallest (in the Y dimension) on top of it on one side or the other. Then continue stacking them in this "stair-stepped" fashion going right wards and upwards (for example go right until you can't, then go up, etc, etc).

    That's probably non-ideal, and may very well give you bad results, but it's what popped to mind first.

    0 讨论(0)
提交回复
热议问题