Dwa stosy można skutecznie zaimplementować za pomocą jednej tablicy o stałym rozmiarze: stos nr 1 zaczyna się od lewego końca i rośnie w prawo, a stos nr 2 zaczyna się od prawego końca i rośnie w lewo. Czy to samo jest możliwe dla trzech stosów?
Mówiąc dokładniej, czy możliwe jest wdrożenie trzech stosów, biorąc pod uwagę następujące warunki:
- Masz tablicę o stałym rozmiarze, która może pomieścić N obiektów.
- Dopóki suma trzech rozmiarów stosu wynosi <N, push () nie powinien zawieść.
- Zarówno operacje push (), jak i pop () powinny zająć czas O (1).
- Oprócz tablicy możesz użyć tylko dodatkowego miejsca O (1).
Oto przykłady rozwiązań, które nie spełniają tych wymagań:
- Podział tablicy na 3 stałe części i użycie każdej części do stosu (narusza 2).
- Podobnie jak powyżej, ale z ruchomymi granicami między stosami (narusza 3).
- Proste implementacje oparte na listach połączonych (narusza 4).
Przyjmę nietrywialne algorytmy lub dowody niemożności, nawet jeśli nie spełniają one wszystkich warunków (1) - (4) dokładnie, na przykład algorytm, w którym push / pop zajmuje zamortyzowany czas O (1) lub gdzie dodatkowa pamięć jest mniejsza niż O (N), np. O (log N). Lub dowód niemożności, który pokazuje, że na przykład dostęp do mniej niż 5 elementów tablicy na push / pop jest niemożliwy.