Se pueden implementar de manera eficiente dos pilas usando una matriz de tamaño fijo: la pila # 1 comienza desde el extremo izquierdo y crece hacia la derecha, y la pila # 2 comienza desde el extremo derecho y crece hacia la izquierda. ¿Es lo mismo posible para tres pilas?
Más específicamente, es posible implementar tres pilas dadas las siguientes condiciones:
- Tiene una matriz de tamaño fijo que puede contener N objetos.
- Mientras la suma de los tres tamaños de pila sea <N, push () no debería fallar.
- Ambas operaciones push () y pop () deberían tomar tiempo O (1).
- Además de la matriz, puede usar solo O (1) espacio adicional.
Aquí hay ejemplos de soluciones que no satisfacen estos requisitos:
- Dividir la matriz en 3 partes fijas y usar cada parte para una pila (viola 2).
- Similar a lo anterior pero con límites móviles entre las pilas (viola 3).
- Implementaciones simples basadas en listas vinculadas (viola 4).
Aceptaré algoritmos no triviales o pruebas de imposibilidad incluso si no cumplen con todas las condiciones (1) - (4) exactamente, por ejemplo, un algoritmo donde push / pop toma O (1) tiempo amortizado, o donde el la memoria adicional es menor que O (N), por ejemplo, O (log N). O una prueba de imposibilidad que muestra que, por ejemplo, es imposible acceder a menos de 5 elementos de la matriz por push / pop.