Stack Overflow на русском Asked by igumnov on December 7, 2021
Есть множество нормально ориентированных прямоугольников(параллельных оси X) rect(w,h)
и большой прямоугольник RECT(W,H)
в которой пакуются остальные(вращать их нельзя). Известно что w<W h<H
. Существует ли какой-то точный способ заранее узнать влезут ли они все в большой прямоугольник, кроме способа при котором к ним вручную применяется известный алгоритмы упаковки(MAXRECTS, Гильотина) и затем просто смотрится свободное место(fill rate) в большом прямоугольнике.
Bin Packing Problem,
для которой доказана ее NP
-полнота. Соответственно, из теории алгоритмов напрямую следует, что задача о проверке того, поместятся ли ваши
{rect(w, h)}
внутрьRECT(W, H)
— тожеNP
-полная.
{rect(w, h)}
в RECT(W, H)
не гарантирует того, что этого способа не существует.В связи с этим, если говорить формально, единственный способ точного решения поставленной задачи - это взять какой-нибудь точный алгоритм со сложностью
O(2^n)
и совершить проверку с его помощью.
fill rate
— все-таки мы имеем дело с NP-
полнотой.
В плохом случае для конкретной эвристики вы получите неоптимальное разбиение, что, в общем-то, кажется мне не слишком критичным. Ну да, не получилось сэкономить 20 пикселей в файле с запакованными текстурами, ничего страшного.
Вот еще один неплохой референс по теме, который мне удалось найти.
Answered by M. Williams on December 7, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP