По моему скромному мнению, первым шагом является вычисление для каждого столбца наименее требуемой высоты. Используя изображение в качестве примера, для первого столбца требуется, по меньшей мере, высота 10, что обеспечивается красными, зелеными и маленькими синими прямоугольниками. Это легко сделать путем итерации через каждый заданный прямоугольник и добавления их соответствующей высоты к столбцам, которые он занимает. Таким образом, максимальное число во всей «высоте столбца» найдено, что я называю «столпом». На вашей фотографии «столп» находится в столбце 8:10 с высотой 14, внесенный прямоугольником 1,2,4,6 (пронумерованный снизу вверх). Это означает, что минимальная высота упаковки составляет, по меньшей мере, высоту «столба», поскольку столбцы «столба» заполнены сплошным слоем и не могут быть дополнительно уменьшены. И укладка эти четыре прямоугольника вверх формирует такую картину: (не-столп прямоугольник не показан)
Тогда столб делит изображение на две части, одна область слева от стойки, а другой на другой боковая сторона. Кроме того, прямоугольники «без столба» (R3,5,7,8) отдельно расположены также в двух областях. R3, R7 на LHS и R5, R8 на RHS.
Теперь рассмотрим первую часть левой части. Я переставил столп прямоугольниками, как показано это на рисунке (Рис.3):
С перестроенной столп прямоугольника порядка наложения, хотя у меня нет жесткого доказательства, вполне возможно, что независимо от того, что формы и то, что число прямоугольников расположено на LHS столба, все указанные прямоугольники могут вписываться в пустое пространство на LHS (ограничение здесь состоит в том, что эти прямоугольники не могут дать более высокий опорный столб, иначе шаг 1 уже обнаружил бы и использовал бы его как фактический столп). Эта компоновка дает пустому пространству на LHS лучшую «пространственную согласованность», что означает, что пустое пространство, созданное каждым прямоугольником столбца, укладывается в порядке возрастания снизу вверх. Эта «согласованность» позволяет пустым пространствам, созданным каждым прямоугольником столбца, «работать вместе», а затем содержать перетаскивания, которые выше, чем любое пустое пространство, созданное прямоугольником одиночной колонны. Например, зеленый прямоугольник на следующем рисунке подходит для использования пустого пространства, созданного синим и фиолетовым прямоугольником вместе.
Предполагая, что утверждения выше верно, то прямоугольники, расположенные на LHS никогда не будет делать больший стек, чем колонны. Однако, если эти перегородки требуют какого-либо сотрудничества между пустым пространством, чтобы вписаться в LHS, тогда они фактически ограничивают возможность свопинга для прямоугольников столбцов. Например, пример fig.3, зеленый прямоугольник требует, чтобы фиолетовый и синий были соседними, чтобы вписаться, однако, чтобы получить лучшую согласованность пространства в RHS, пурпурный цвет должен проходить между фиолетовым и синим.Это означает, что зеленый цвет на LHS делает невозможным получение наилучшей консистенции для RHS и, следовательно, позволяет иметь прямоугольники, расположенные на RHS, не может помещаться в пустое пространство и вызывать стопку с отверстиями и превышает высоту, установленную стойкой. Извините, что здесь я не могу придумать такой случай, но он определенно имеет значение.
В заключение:
Шаг 1 - найти столп, один простой ответ можно найти здесь, если каждый прямоугольник задействован в столбе - высота столба - минимальная высота упаковки.
Шаг 2 - изучить обе стороны до стойки.
case a: Если одна сторона не имеет свободного прямоугольника, то другая сторона может быть легко заполнена методом «наилучшей согласованности», и в результате минимальная высота упаковки снова равна высоте столба.
case b: Если одна сторона не требует согласованности свободного пространства, то эта сторона может быть заполнена, а другая сторона все еще может использовать «наилучшую согласованность». Например: (исходное изображение)
В этом случае пустое пространство, требуемое для установки в R3, создается только R6 и то же для R7 и R2. Таким образом, замена порядка укладки R6 и R2 другим прямоугольником столбца не сделает R3, R7 непригодным, если R3, R7 следует за заменой. Что может привести к «лучшая консистенции» случай для РИТ:
Тогда RHS может быть заполнен с ОРЗ, расположенными прямоугольниками, не превышая высоту столба.
Это требование неконсистенции можно идентифицировать, сравнивая высоту свободного прямоугольника с подставкой и высоту прямоугольника столба, чтобы создать свободное пространство для него. Если высота свободного прямоугольника не больше, чем другая, то для этого не требуется задействовать второй прямоугольник столбца, что означает, что он не требует согласованности свободного пространства.
case c: Обеим сторонам нужна консистенция свободного пространства. Здесь возникают неприятности. Повторите пример fig.3. Зеленый на рис.3 имел фиолетовый и синий цвета. Это означает, что зеленый, фиолетовый и синий цвета считаются целыми, чтобы сменить порядок укладки с другими прямоугольниками столбцов, чтобы получить свободный прямоугольник LHS. И в этом целом синий и фиолетовый тоже могут меняться.
Если RHS не может подгонять, что приводит к высоте упаковки, превышающей высоту стойки, тогда необходимо повторить шаг 2, но сначала установите RHS и попробуйте установить LHS после этого. Затем в качестве конечного результата берется результат сравнения нижней высоты упаковки. Логика для этого случая неясна, очень вероятно, что лучше альтернатива.
Я знаю, что это не следует называть правильным решением, а скорее случайными и свободными мыслями, но это явно не подходит для комментариев. Простите меня за мое неуклюжие объяснения и плохую обработку изображений. Надеюсь это поможет.
Ну, у меня нет решения для вас * (хотя моя кишка говорит мне, что есть одна, вероятно, связанная с решением динамического программирования для нахождения перекрывающихся интервалов) *, но я могу доказать, что ваше решение * (данное в комментарии к ответу ниже) * для этого конкретного примера проблемы является оптимальным: вы можете легко доказать, что максимальная высота любого решения никогда не может быть ниже 'max (сумма квадратов в одном столбце)', поэтому, если вы найдете решение, равное этому, должно быть оптимальным. –
Мы также можем показать, что ваш алгоритм не оптимален: изображения двух тощих блоков высотой 3 слева друг от друга слева, затем один очень широкий блок высоты 4, а затем тонкий блок высоты 5 справа. –
@Andreas Удостоверьтесь, чтобы я не пропустил свой ответ - я вложил в это время. :) –