Это звучит так же, как проблема резания заготовки , которая чрезвычайно сложна! В лучших решениях используется линейное программирование (обычно основанное на симплекс-методе) с генерацией столбцов (которая даже послегоды, проведенные в исследовательском проекте по решению проблем, я чувствую себя не готовым дать достаточно приличное объяснение).Короче говоря, вы не захотите попробовать этот подход в Actionscript;следовательно, независимо от того, что вы делаете, вы не должны ожидать хороших результатов ни с чем, кроме мелких проблем.
Лучший совет, который я могу предложить, - посмотреть, сможете ли вы разрезать исходный прямоугольник на полосы (каждой ширины самых больших прямоугольников, которые вам нужны), а затем поделите остаток от каждой полосы после того, как прямоугольник «головы» был удален.
Я бы рекомендовал использовать в качестве стратегии оптимизации использование ветвей и границ.BnB работает, выполняя исчерпывающий поиск по дереву, который отслеживает лучшее решение, замеченное до сих пор.Когда вы найдете решение, обновите привязку и вернитесь назад, чтобы найти следующее решение.Всякий раз, когда вы знаете, что ваш поиск приводит вас к ветви, которая, как вы знаете, не может привести к лучшему решению, чем лучшее, которое вы нашли, вы можете вернуться назад на ранней стадии.
Поскольку эти деревья поиска будут очень большими, выВозможно, вы захотите установить ограничение по времени для поиска и просто вернуть все возможное.
Надеюсь, это поможет.