Algoritmo de altura decrescente de primeiro ajuste (FFDH) O
FFDH compacta o próximo item R (em altura não crescente) no primeiro nível em que R se encaixa. Se nenhum nível puder acomodar R, um novo nível será criado.
Complexidade temporal de FFDH: O (n · log n).
Relação de aproximação: FFDH (I) <= (17/10) · OPT (I) +1; o limite assintótico de 17/10 é apertado.
O algoritmo de altura decrescente do próximo ajuste (NFDH)
NFDH compacta o próximo item R (em altura não crescente) no nível atual, se R se encaixar. Caso contrário, o nível atual é "fechado" e um novo nível é criado.
Complexidade temporal: O (n · log n).
Razão de aproximação: NFDH (I) <= 2 · OPT (I) +1; o limite assintótico de 2 é apertado.
Algoritmo de altura decrescente de melhor ajuste (BFDH) O
BFDH agrupa o próximo item R (em altura não crescente) no nível, entre aqueles que podem acomodar R, para os quais o espaço horizontal residual é o mínimo. Se nenhum nível puder acomodar R, um novo nível será criado.
Algoritmo inferior esquerdo (BL)
Itens de primeira ordem BL por largura não crescente. O BL embala o próximo item o mais próximo possível do fundo, e o mais próximo possível da esquerda, sem sobrepor-se a nenhum item embalado. Observe que BL não é um algoritmo de empacotamento orientado por nível.
Complexidade temporal: O (n ^ 2).
Relação de aproximação: BL (I) <= 3 · OPT (I).
Algoritmo Up-Down (UD) de Baker
UD usa uma combinação de BL e uma generalização de NFDH. A largura da faixa e os itens são normalizados para que a faixa tenha largura unitária. UD ordena os itens com largura não crescente e depois os divide em cinco grupos, cada um com largura no intervalo (1/2, 1], (1 / 3,1 / 2], (1 / 4,1 / 3 ], (1 / 5,1 / 4], (0,1 / 5]. A faixa também é dividida em cinco regiões R1, ···, R5. Basicamente, alguns itens de largura no intervalo (1 / i + 1, 1 / i], para 1 <= i <= 4, são compactados na região Ri pelo BL. Como o BL deixa um espaço de largura crescente de cima para baixo no lado direito da faixa, a UD aproveita essa vantagem primeiro embalando o item em Rj para j = 1, ···, 4 (em ordem) de cima para baixo.Se não houver espaço, o item será embalado em Ri pelo BL. Finalmente, itens de tamanho no máximo 1/5 são compactados nos espaços em R1, ···, R4 pelo algoritmo (generalizado) NFDH.
Razão de aproximação: UD (I) <= (5/4) · OPT (I) + (53/8) H, onde H é a altura máxima dos itens; o limite assintótico de 5/4 é apertado.
Algoritmo de ajuste reverso (RF)
RF também normaliza a largura da faixa e os itens para que a faixa tenha largura unitária. O RF empilha primeiro todos os itens de largura maior que 1/2. Os itens restantes são classificados em altura não crescente e serão compactados acima da altura H0 alcançada por aqueles maiores que 1/2. Em seguida, o RF repete o seguinte processo. Grosso modo, a RF empacota itens da esquerda para a direita com o fundo ao longo da linha de altura H0 até não haver mais espaço. Empacota os itens da direita para a esquerda e de cima para baixo (chamado de nível reverso) até que a largura total seja de pelo menos 1/2. Em seguida, o nível reverso é reduzido até que (pelo menos) um deles toque em algum item abaixo. A lista suspensa é repetida de alguma forma.
Relação de aproximação: RF (I) <= 2 · OPT (I).
Algoritmo de Steinberg O algoritmo de
Steinberg, indicado como M no artigo, estima um limite superior da altura H necessária para embalar todos os itens, de modo que se prove que os itens de entrada podem ser compactados em um retângulo de largura W e altura H. Eles então defina sete procedimentos (com sete condições), cada um para dividir um problema em dois menores e resolvê-los recursivamente. Foi demonstrado que qualquer problema tratável satisfaz uma das sete condições.
Relação de aproximação: M (I) <= 2 · OPT (I).
Algoritmo Split-Fit (SF) SF divide itens em dois grupos, L1 com largura maior que 1/2 e L2 no máximo 1/2. Todos os itens de L1 são embalados pela FFDH. Em seguida, eles são organizados de forma que todos os itens com largura superior a 2/3 fiquem abaixo daqueles com largura no máximo 2/3. Isso cria um retângulo R de espaço com largura 1/3. Os itens restantes em L2 são empacotados para R e o espaço acima daqueles empacotados com L1 usando FFDH. Os níveis criados em R são considerados inferiores aos criados acima da embalagem de L1.
Relação de aproximação: SF (I) <= (3/2) · OPT (I) + 2; o limite assintótico de 3/2 é apertado.
Algoritmo de Sleator O algoritmo de
Sleater consiste em quatro etapas:
Todos os itens com largura superior a 1/2 são embalados um sobre o outro na parte inferior da faixa. Suponha que h0 seja a altura da gaxeta resultante. Toda gaxeta subsequente ocorrerá acima de h0.
Os itens restantes são ordenados por altura não crescente. Um nível de itens é compactado (em ordem de altura não crescente) da esquerda para a direita ao longo da linha de altura h0.
Uma linha vertical é então desenhada no meio para cortar a tira em duas metades iguais (observe que essa linha pode cortar um item que está parcialmente empacotado na metade direita). Desenhe dois segmentos de linhas horizontais de comprimento e meio, um na metade esquerda (chamada linha de base esquerda) e outro na metade direita (chamada linha de base direita) o mais baixo possível, de modo que as duas linhas não cruzem nenhum item.
Escolha a linha de base esquerda ou direita que tem uma altura mais baixa e coloque um nível de itens na metade correspondente da faixa até que o próximo item seja muito largo.
Uma nova linha de base é formada e a Etapa (4) é repetida na linha de base inferior até que todos os itens sejam empacotados.
Complexidade temporal: O (n · log n).
A taxa de aproximação do algoritmo do Sleator é de 2,5, o que é pequeno.