Алгоритм Позиционирования Объекта

мне интересно, есть ли "оптимальное" решение для этой проблемы:

у меня есть пространство размером n x m (пиксель) с P существующими прямоугольными объектами в разных размерах. Теперь я хочу разместить q (одинакового размера) новых объектов в этом пространстве без перекрытия.

алгоритм, который я придумал:

  1. создать массив A[][] с размером [(n)/(size_of_object_from_q)]x[(n)/(size_of_object_from_q)]
  2. повторите все элементы из p и для каждый:

    mark all fields in A[][] as occupied, where the element "lies"

  3. Поместите все элементы из q в соответствующие места, где поля в a [] [] не отмечены

(мальчик, я надеюсь, что смогу это понять...)

есть ли лучший способ сделать это? Любая помощь будет действительно оценили!

3 ответов


из краткого поиска в интернете, кажется, что оптимальная упаковка прямоугольник NP-hard


Если я понимаю вопрос, похоже, вы ищете "оптимальный" алгоритм упаковки бункера (он же проблема рюкзака). Это NP-полная проблема, хотя ваше описание звучит так, будто вы, вероятно, можете грубо заставить свой путь к оптимальному решению.


Я знаю, что это не конкретный ответ на ваш вопрос, но может быть полезно исследовать и/или копаться в graphviz исходный код. graphviz предлагает ряд макетных моделей, в том числе neato, который пытается минимизировать глобальную энергетическую функцию.

Википедия имеет некоторый псевдо-код для алгоритмы force-base.