Проблема заключается в NP Hard, но это только для оптимального решения. Я думаю, что вы действительно хотите, это решение, которое просто выглядит хорошо.
Поэтому я предлагаю искать алгоритмы, которые делают данные полезными. Как только я захотел компоновки изображений для DeepZoom Composer, и я попытался переработать алгоритм, основанный на силовом взаимодействии графика. http://en.wikipedia.org/wiki/Force-based_algorithms
Он работал очень хорошо даже для 600-тонных прямоугольников, вам просто нужно сыграть с деталями моделирования.
- Какое расстояние подсчитано?
- Какие функции вы используете для сил притяжения и отталкивания?
- Как много совпадений вы собираетесь принять?
Единственная проблема, которую я не мог решить полностью, состоял в том, что прямоугольники образовали круглую форму, а не большую прямоугольную форму, что естественно при моделировании физики. Но вы можете обойти это с помощью тщательно расположенных источников вспомогательных сил.
Есть несколько вопросов о размещении прямоугольника в SO. Например, этот http://stackoverflow.com/questions/1799662/object-positioning-algorithm/1799752#1799752, или этот http://stackoverflow.com/questions/716558/place-random-non-overlapping-rectangles -он-а-панель – Anna