Алгоритм
уменьшения первой аппроксимации (FFDH) FFDH упаковывает следующий элемент R (без увеличения высоты) на первый уровень, в который входит R. Если ни один уровень не может вместить R, создается новый уровень.
Временная сложность FFDH: O (n · log n).
Коэффициент аппроксимации: FFDH (I) <= (17/10) · OPT (I) +1; асимптотическая граница 17/10 плотная.
Алгоритм
убывающей высоты при следующей аппроксимации (NFDH) NFDH упаковывает следующий элемент R (без увеличения высоты) на текущий уровень, если R соответствует. В противном случае текущий уровень «закрыт» и создается новый уровень.
Временная сложность: O (n · log n).
Коэффициент приближения: NFDH (I) <= 2 · OPT (I) +1; асимптотическая граница 2 жесткая.
Алгоритм
уменьшения наилучшей посадки по высоте (BFDH) BFDH упаковывает следующий элемент R (без увеличения высоты) на уровне среди тех, которые могут вместить R, для которых остаточное горизонтальное пространство является минимальным. Если ни один уровень не может вместить R, создается новый уровень.
Алгоритм снизу-слева (BL)
BL элементов первого порядка по не увеличивающейся ширине. BL упаковывает следующий элемент как можно ближе ко дну, а затем как можно ближе к левому краю, чтобы он мог не перекрываться с каким-либо упакованным элементом. Обратите внимание, что BL не является алгоритмом упаковки, ориентированным на уровень.
Временная сложность: O (n ^ 2).
Коэффициент приближения: BL (I) <= 3 · OPT (I).
Алгоритм Бейкера 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.
Коэффициент аппроксимации: UD (I) <= (5/4) · OPT (I) + (53/8) H, где H - максимальная высота предметов; асимптотическая граница 5/4 плотная.
Алгоритм обратной подгонки (RF)
RF также нормализует ширину полосы и элементов так, чтобы полоса имела единичную ширину. RF сначала укладывает все элементы шириной больше 1/2. Остальные предметы сортируются по не увеличивающейся высоте и будут упакованы выше высоты H0, достигнутой теми, кто больше 1/2. Затем РФ повторяет следующий процесс. Грубо говоря, RF упаковывает предметы слева направо так, чтобы их дно было вдоль линии высоты H0, пока не осталось места. Затем упаковывает предметы справа налево и сверху вниз (так называемый обратный уровень), пока общая ширина не станет как минимум 1/2. Затем обратный уровень падает до тех пор, пока (по крайней мере) один из них не коснется какого-либо предмета ниже. Раскрытие как-то повторяется.
Коэффициент аппроксимации: RF (I) <= 2 · OPT (I).
Алгоритм
Стейнберга Алгоритм Стейнберга, обозначенный в статье буквой M, оценивает верхнюю границу высоты H, необходимую для упаковки всех предметов, так, чтобы было доказано, что входные элементы могут быть упакованы в прямоугольник ширины W и высоты H. Затем они определить семь процедур (с семью условиями), каждая из которых разделит проблему на две меньшие и рекурсивно решит их. Было показано, что любая решаемая задача удовлетворяет одному из семи условий.
Коэффициент аппроксимации: M (I) <= 2 · OPT (I).
Алгоритм 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 плотная.
Алгоритм
Слеатора Алгоритм Слеатора состоит из четырех шагов:
Все элементы шириной более 1/2 упакованы друг на друга в нижней части полосы. Предположим, что h0 - высота результирующей упаковки. Вся последующая упаковка будет происходить выше h0.
Остальные предметы упорядочены по не увеличивающейся высоте. Уровень предметов упаковывается (в порядке увеличения высоты) слева направо по линии высоты h0.
Затем в середине рисуется вертикальная линия, чтобы разрезать полосу на две равные половины (обратите внимание, что эта линия может разрезать предмет, который частично упакован в правой половине). Нарисуйте два горизонтальных отрезка длиной одну половину, один поперек левой половины (называемый левой базовой линией) и один поперек правой половины (называемой правой базовой линией) как можно ниже, чтобы две линии не пересекали какой-либо элемент.
Выберите левую или правую базовую линию, которая имеет меньшую высоту, и упакуйте уровень предметов в соответствующую половину полосы, пока следующий предмет не станет слишком широким.
Формируется новая базовая линия, и шаг (4) повторяется на нижней базовой линии, пока все элементы не будут упакованы.
Временная сложность: O (n · log n).
Коэффициент аппроксимации алгоритма Слеатора составляет 2,5, что является жестким.