Duas pilhas podem ser implementadas com eficiência usando uma matriz de tamanho fixo: a pilha nº 1 começa na extremidade esquerda e cresce para a direita e a pilha nº 2 começa na extremidade direita e cresce para a esquerda. O mesmo é possível para três pilhas?
Mais especificamente, é possível implementar três pilhas, dadas as seguintes condições:
- Você tem uma matriz de tamanho fixo que pode conter N objetos.
- Contanto que a soma dos três tamanhos de pilha seja <N, push () não deve falhar.
- As operações push () e pop () devem levar tempo O (1).
- Além da matriz, você pode usar apenas O (1) espaço adicional.
Aqui estão exemplos de soluções que não atendem a esses requisitos:
- Dividir a matriz em 3 partes fixas e usar cada parte de uma pilha (viola 2).
- Semelhante ao anterior, mas com limites móveis entre as pilhas (viola 3).
- Implementações simples baseadas em lista vinculada (viola 4).
Aceitarei algoritmos não triviais ou provas de impossibilidade, mesmo que eles não atendam a todas as condições (1) - (4) exatamente, por exemplo, um algoritmo em que push / pop leve O (1) tempo amortizado ou onde o a memória adicional é menor que O (N), por exemplo, O (log N). Ou uma prova de impossibilidade que mostre que, por exemplo, acessar menos de 5 elementos da matriz por push / pop é impossível.