sarkis-tlt
@sarkis-tlt
Full Stack Web Developer (ReactJS/MeteorJS/NodeJS)

Как максимально эффективно разместить элементы на площади?

Условие задачи:
У нас есть площадь с заданными пропорциями, скажем:
const area = [100, 200];
Первый элемент в массиве высота, второй ширина. И у нас есть массив с элементами:
const items = [
[10, 4],
[20, 30],
[25, 3],
...
];

Нам нужно функция которая будет принимать два аргумента, первый площадь и второй элементы:
function resolve(area, items) {...};
Которая будет возвращать объект с двумя массивами:
console.log(resolve(area, items));
// { solved: [[4, 10], [20, 30], [3, 25]...], exclude: [[50, 60],[2, 100]...]};

Первый массив включает в себя максимальное количество элементов в правильном порядке и позиции которое можно поместить на заданой площади, и второй включает в себя список элементов которые не поместились.
Все элементы можно переворачивать меняя местами ширину и высоту.

Решение может быть на любом языке или простой math. формулой, буду благодарен за любую помощь, спасибо!
  • Вопрос задан
  • 820 просмотров
Решения вопроса 1
sarkis-tlt
@sarkis-tlt Автор вопроса
Full Stack Web Developer (ReactJS/MeteorJS/NodeJS)
я думаю это наиболее точное решение из всего что я нашел:
rosettacode.org/wiki/Knapsack_problem
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
longclaps
@longclaps
Задача об укладке ранца не имеет решения "math. формулой".
Ваш случай несколько проще из-за дискретности.
Нормальная тема для fl, при условии, что есть понимание, что задачи оптимизации не всегда решаются оптимальным из всех возможных способом )
Ответ написан
Комментировать
alex-1917
@alex-1917
Если ответ помог, отметь решением
Хаха, насмешили. Хотя год назад, когда взялся за похожий проект, я тоже был в таких же розовых очках)))
В итоге проект обошелся в 200к.
Общая схема такая:
1. в БД вбиваете координаты ВСЕХ точек вашего участка, т.е. 100*200=20000 точек (у меня было 1000*1000)
2. я делал на php - получаю входящий запрос на нужный размер, например нужен прямоугольник 12*7, выбираю из БД массив свободных точек, далее в php обрабатываю его, там на 300 строчек скрипт получился.
3. далее возврат в БД - помечаю все точки из выбранного места меткой ЗАНЯТО
и т.д.

У вас конечно принципиально другая задача, но сложность однозначно похожая!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы