Алгоритм Позиционирования Объекта
мне интересно, есть ли "оптимальное" решение для этой проблемы:
у меня есть пространство размером n x m (пиксель) с P существующими прямоугольными объектами в разных размерах. Теперь я хочу разместить q (одинакового размера) новых объектов в этом пространстве без перекрытия.
алгоритм, который я придумал:
- создать массив A[][] с размером
[(n)/(size_of_object_from_q)]x[(n)/(size_of_object_from_q)]
-
повторите все элементы из p и для каждый:
mark all fields in A[][] as occupied, where the element "lies"
Поместите все элементы из q в соответствующие места, где поля в a [] [] не отмечены
(мальчик, я надеюсь, что смогу это понять...)
есть ли лучший способ сделать это? Любая помощь будет действительно оценили!
3 ответов
из краткого поиска в интернете, кажется, что оптимальная упаковка прямоугольник NP-hard
Если я понимаю вопрос, похоже, вы ищете "оптимальный" алгоритм упаковки бункера (он же проблема рюкзака). Это NP-полная проблема, хотя ваше описание звучит так, будто вы, вероятно, можете грубо заставить свой путь к оптимальному решению.
Я знаю, что это не конкретный ответ на ваш вопрос, но может быть полезно исследовать и/или копаться в graphviz исходный код. graphviz предлагает ряд макетных моделей, в том числе neato, который пытается минимизировать глобальную энергетическую функцию.
Википедия имеет некоторый псевдо-код для алгоритмы force-base.