Два стеки можна ефективно реалізувати за допомогою одного масиву фіксованого розміру: стек №1 починається з лівого кінця і росте вправо, а стек №2 починається з правого кінця і росте з лівого. Чи те ж саме можливо для трьох стеків?
Більш конкретно, чи можливо реалізувати три стеки за таких умов:
- У вас є масив фіксованого розміру, який може містити N об’єктів.
- Поки сума трьох розмірів стека <N, push () не повинно провалюватися.
- І операції push (), і pop () повинні зайняти O (1) час.
- Крім масиву, ви можете використовувати лише додатковий простір O (1).
Ось приклади рішень, які не відповідають цим вимогам:
- Розбиття масиву на 3 нерухомі частини та використання кожної частини для стека (порушує 2).
- Аналогічно вище, але з рухомими межами між стеками (порушує 3).
- Прості реалізації на основі пов'язаного списку (порушує 4).
Я прийму нетривіальні алгоритми чи докази неможливості, навіть якщо вони точно не відповідають усім умовам (1) - (4), наприклад, алгоритм, коли push / pop займає O (1) амортизований час, або де додаткова пам'ять менша, ніж O (N), наприклад O (log N). Або доказ неможливості, який показує, що, наприклад, отримати доступ до менш ніж 5 елементів масиву за один натискання / поп неможливо.