Скажем, у меня есть некоторые пункты, у которых есть определенный длина
и горизонтальное положение
(оба постоянные):
1 : A
2 : B
3 : CC
4 : DDD (item 4 start at position 1, length = 3)
5 : EE
6 : F
Я хотел бы упаковать их вертикально, приводя к прямоугольнику, имеющему наименьшую высоту как возможная.
До сих пор у меня есть некоторый очень простой алгоритм, что петли по пунктам и что контрольная строка рядом, размещая их в тот ряд возможна (который означает, не сталкиваясь с чем-то еще). Иногда, это работает отлично (случайно), но иногда, это приводит к неоптимальному решению.
Вот то, что это дало бы для вышеупомянутого примера (шаг за шагом):
A | A B | ACC B | ACC B | ACC B | ACC B |
DDD | DDD | FDDD |
EE | EE |
В то время как оптимальное решение было бы:
ADDDB
FCCEE
Примечание: Я нашел, что элементы сортировки их , который длина
(порядок по убыванию) сначала, прежде, чем применить алгоритм, дает лучшим результатам (но это все еще не прекрасно).
Есть ли какой-либо алгоритм, который дал бы мне оптимальное решение в соответствующее время? (пробующий все возможности не выполнимо),
ОТРЕДАКТИРУЙТЕ: вот пример, который не работал бы, используя сортирующий уловку, и это не будет работать, используя то, что предложенный Тилерохлсен (если я не понимаю его ответ):
1 : AA
2 : BBB
3 : CCC
4 : DD
Дал бы:
AA BBB
CCC
DD
Оптимальное решение:
DDBBB
AACCC