Алгоритм уменьшения первой высоты (FFDH)
FFDH упаковывает следующий предмет R (в не увеличивающейся высоте) на первом уровне, где R соответствует. Если ни один уровень не может вместить R, создается новый уровень.
Временная сложность FFDH: O (n · log n).
Коэффициент аппроксимации: FFDH (I) <= (17/10) · OPT (I) +1; асимптотическая граница 17/10 плотная. </p>
Алгоритм уменьшения высоты следующего приближения (NFDH)
NFDH упаковывает следующий элемент R (в не увеличивающейся высоте) на текущий уровень, если R соответствует. В противном случае текущий уровень «закрыт» и создается новый уровень.
Временная сложность: O (n · log n).
Коэффициент аппроксимации: NFDH (I) <= 2 · OPT (I) +1; асимптотическая граница 2 плотная. </p>
Алгоритм оптимальной посадки по убыванию высоты (BFDH)
BFDH упаковывает следующий элемент R (в не увеличивающейся высоте) на уровне среди тех, которые могут вместить R, для которых остаточное горизонтальное пространство является минимальным. Если ни один уровень не может вместить R, создается новый уровень.
Алгоритм снизу-слева (BL)
BL элементы первого порядка по не увеличивающейся ширине. BL упаковывает следующий предмет как можно ближе к основанию, а затем как можно ближе к левому краю, чтобы он мог не перекрываться с любым упакованным предметом. Обратите внимание, что BL не является алгоритмом упаковки, ориентированным на уровень.
Временная сложность: O (n ^ 2).
Коэффициент приближения: BL (I) <= 3 · OPT (I). </p>
Алгоритм Бейкера-Up-Down (UD)
UD использует комбинацию BL и обобщение NFDH. Ширина полосы и предметов нормализуются так, чтобы полоса имела единичную ширину. UD упорядочивает элементы по не увеличивающейся ширине, а затем разделяет элементы на пять групп, каждая из которых имеет ширину в диапазоне (1/2, 1], (1 / 3,1 / 2], (1 / 4,1 / 3 ], (1 / 5,1 / 4], (0,1 / 5]. Полоса также разделена на пять областей R1, ..., R5. В основном, некоторые элементы ширины в диапазоне (1 / i + 1, 1 / i], для 1 <= i <= 4, упакованы в область Ri с помощью BL. Поскольку BL оставляет пространство увеличивающейся ширины сверху вниз на правой стороне полосы, UD использует это преимущество первым упаковка элемента в Rj для j = 1, ..., 4 (по порядку) сверху вниз. Если такого пространства нет, элемент упаковывается в Ri с помощью BL. Наконец, элементы размером не более 1/5 упакованы в пространства в R1, ..., R4 (обобщенным) алгоритмом NFDH. Опять же, если в этих областях нет места, элемент упаковывается в R5 с использованием NFDH. <br>
Коэффициент аппроксимации: UD (I) <= (5/4) · OPT (I) + (53/8) H, где H - максимальная высота предметов; асимптотическая граница 5/4 плотная. </p>
Алгоритм обратной подгонки (RF)
RF также нормализует ширину полосы и предметов так, чтобы полоса имела единичную ширину. RF сначала укладывает все элементы шириной больше 1/2. Остальные элементы сортируются по не увеличивающейся высоте и будут упакованы выше высоты H0, достигнутой теми, кто больше 1/2. Затем РФ повторяет следующий процесс. Грубо говоря, RF упаковывает предметы слева направо так, чтобы их дно было вдоль линии высоты H0, пока не осталось места. Затем упаковывает предметы справа налево и сверху вниз (так называемый обратный уровень), пока общая ширина не станет как минимум 1/2. Затем обратный уровень падает до тех пор, пока (по крайней мере) один из них не коснется какого-либо предмета ниже. Раскрытие как-то повторяется.
Коэффициент приближения: RF (I) <= 2 · OPT (I). </p>
алгоритм Штейнберга
Алгоритм Стейнбергаритм, обозначенный в статье буквой M, оценивает верхнюю границу высоты H, необходимую для упаковки всех элементов, так что доказано, что входные элементы могут быть упакованы в прямоугольник ширины W и высоты H. Затем они определяют семь процедур (с семью условиями), каждое из которых делит задачу на две меньшие и решает их рекурсивно. Было показано, что любая поддающаяся решению проблема удовлетворяет одному из семи условий.
Коэффициент приближения: M (I) <= 2 · OPT (I). </p>
Алгоритм Split-Fit (SF)
SF делит предметы на две группы: L1 с шириной больше 1/2 и L2 не более 1/2. Все предметы L1 сначала упакованы FFDH. Затем они располагаются так, чтобы все элементы с шириной более 2/3 были ниже элементов с шириной не более 2/3. Это создает прямоугольник R пространства с шириной 1/3. Остальные элементы в L2 затем упаковываются в R, а пространство над теми, которые упакованы в L1, используют FFDH. Уровни, созданные в R, считаются ниже уровней, созданных выше упаковки L1.
Коэффициент приближения: SF (I) <= (3/2) · OPT (I) + 2; асимптотическая граница 3/2 плотная. </p>
Алгоритм Слеатора
Алгоритм Слитера состоит из четырех шагов:
Все элементы шириной более 1/2 упакованы друг на друга в нижней части полосы. Предположим, что h0 - высота полученной упаковки. Вся последующая упаковка будет происходить выше h0.
Остальные предметы упорядочены по возрастанию. Уровень предметов упаковывается (в порядке увеличения высоты) слева направо по линии высоты h0.
Затем в середине рисуется вертикальная линия, чтобы разрезать полосу на две равные половины (обратите внимание, что эта линия может разрезать предмет, который частично упакован в правой половине). Нарисуйте два горизонтальных отрезка длиной одну половину, один поперек левой половины (называемый левой базовой линией) и один поперек правой половины (называемой правой базовой линией) настолько низко, насколько возможно, чтобы две линии не пересекали какой-либо элемент.
Выберите левую или правую базовую линию, которая имеет меньшую высоту, и упакуйте уровень предметов в соответствующую половину полосы, пока следующий предмет не станет слишком широким.
Формируется новая базовая линия, и шаг (4) повторяется на нижней базовой линии, пока все элементы не будут упакованы.
Временная сложность: O (n · log n).
Коэффициент аппроксимации алгоритма Слеатора составляет 2,5, что является жестким.