Hai ngăn xếp có thể được thực hiện một cách hiệu quả bằng cách sử dụng một mảng có kích thước cố định: ngăn xếp số 1 bắt đầu từ đầu bên trái và phát triển sang bên phải và ngăn xếp số 2 bắt đầu từ đầu bên phải và phát triển sang bên trái. Là giống nhau có thể cho ba ngăn xếp?
Cụ thể hơn, có thể thực hiện ba ngăn xếp với các điều kiện sau:
- Bạn có một mảng kích thước cố định có thể chứa N đối tượng.
- Miễn là tổng của ba kích thước ngăn xếp là <N, không nên thất bại.
- Cả hai hoạt động đẩy () và pop () sẽ mất thời gian O (1).
- Ngoài mảng, bạn chỉ có thể sử dụng không gian bổ sung O (1).
Dưới đây là ví dụ về các giải pháp không thỏa mãn các yêu cầu này:
- Chia mảng thành 3 phần cố định và sử dụng từng phần cho một ngăn xếp (vi phạm 2).
- Tương tự như trên nhưng với ranh giới di chuyển giữa các ngăn xếp (vi phạm 3).
- Thực hiện dựa trên danh sách liên kết đơn giản (vi phạm 4).
Tôi sẽ chấp nhận các thuật toán không tầm thường hoặc bằng chứng bất khả thi ngay cả khi chúng không đáp ứng tất cả các điều kiện (1) - (4), ví dụ, thuật toán trong đó đẩy / pop mất thời gian khấu hao O (1) hoặc trong đó bộ nhớ bổ sung nhỏ hơn O (N), ví dụ O (log N). Hoặc một bằng chứng không thể chứng minh cho thấy, ví dụ, việc truy cập ít hơn 5 phần tử của mảng trên mỗi lần đẩy / pop là không thể.