Tất cả các loại lưu trữ liên quan đến việc lưu trữ một cái gì đó tại một điểm và lấy nó sau. Để thực hiện việc này chỉ trong một thao tác, bạn nên thực hiện lưu trữ hoặc truy xuất tự động và chỉ định vị trí của giá trị được lưu trữ trong hoạt động khác.
Nghĩa là, đối với lưu trữ rõ ràng, bạn có thể tạo một toán tử để truy xuất giá trị được tính thứ n trước thao tác này hoặc đặt lại giá trị hiện tại sau n hoạt động. Ngoài ra, bạn có thể sử dụng vị trí tuyệt đối từ khi bắt đầu chương trình hoặc thực hiện nhiều việc khác như tự động xóa một số phần tử sau một số thao tác (như trong ngăn xếp). Bạn cũng có thể tạo nhiều toán tử, truy xuất từ các bản sao khác nhau của bộ lưu trữ có hoặc không có các thao tác tự động này. Và bạn nên cố gắng làm cho số lượng tối đa cần thiết để chỉ định trong các hoạt động nhỏ một cách hợp lý, để bạn có thể chỉ định một toán tử cho mỗi số.
Nhưng trong hầu hết các trường hợp, bạn thậm chí không cần một nhà điều hành và ngôn ngữ sẽ làm điều này hoàn toàn. Đó là khi bạn cần xem xét một mô hình chuẩn hơn như ngăn xếp hoặc hàng đợi. Thành công nhất bây giờ dường như là lập trình ngầm, thậm chí không đề cập đến việc lưu trữ trực tiếp.
Nếu bạn muốn thiết kế một mô hình mới như vậy, bạn có thể thử mở rộng các đánh giá như một dag và thử nghĩ về một dag mặc định nếu không có gì khác được chỉ định. Nhiều khả năng, mặc định chỉ là một cái cây, ngoại trừ việc nhiều lá có thể được liên kết với cùng một đầu vào. Ví dụ, bạn có thể sử dụng một hàng đợi cho một cây cân bằng, hoặc một chồng cho một cây sâu, nơi lá hầu như không đổi, hoặc một cái gì đó như Jelly cho một cây sâu, nơi lá chủ yếu là bản sao của đầu vào.
Nhưng lưu ý rằng, bạn có thể mã hóa hình dạng của cây nhị phân chỉ trong 2 bit cho mỗi toán tử. Vì vậy, nếu ngôn ngữ của bạn có ít hơn 64 toán tử, bạn thực sự có thể bỏ qua các mô hình truyền thống và chỉ mã hóa cây hoàn chỉnh trong các bit dự phòng (gọi chúng là cờ kết hợp_parent và cờ_leaf). Ngay cả khi có nhiều toán tử hơn, bạn có thể tạo một mặc định khá tốt (chẳng hạn như mô hình của Jelly) và 3 bộ sửa đổi để thay đổi nó.
Bạn có thể sử dụng cùng một mô hình để lưu trữ ẩn và rõ ràng để thuận tiện, nhưng bạn không phải làm vậy. Ví dụ: bạn có thể sử dụng ngăn xếp để lưu trữ ẩn, nhưng không sử dụng các phần tử pop trong bộ lưu trữ rõ ràng (hoặc trong một bộ lưu trữ rõ ràng khác ngoài bộ lưu trữ ẩn). Có khả năng nó sẽ không được gọi là một ngăn xếp trong tài liệu cuối cùng, nhưng bạn hiểu ý.
Để tham khảo, kích thước của mã hóa hoàn hảo của cây nhị phân là logarit của các số Catalan . Và kích thước của mã hóa hoàn hảo của một "nhị phân" là logarit của A082161 , nhưng rõ ràng là không thực tế. Điều này giả sử một toán tử có thứ tự đối số khác nhau đặt hai toán tử khác nhau, thêm một bit khác khi không.
Đôi khi bạn vẫn có thể muốn các biến cho các vòng lặp. Có thể viết lại các vòng theo những cách khác. Nhưng nếu bạn thực sự cần nó, đừng sử dụng cấu trúc 1 byte ngoài tên để xác định biến. trừ khi bạn chỉ sử dụng các giá trị được khởi tạo trước, việc sử dụng cờ 1 bit sẽ hiệu quả hơn nếu bạn đang đọc hoặc viết biến này.