Cách tiếp cận đã nói ở trên đòi hỏi mỗi ô có thể chứa một số lượng đủ lớn để giữ số lần mà mảng có thể cần phải được khởi tạo lại, đó là một hình phạt không gian đáng kể. Nếu một vị trí có khả năng giữ ít nhất một giá trị sẽ không bao giờ được viết một cách hợp pháp, người ta có thể tránh có bất kỳ hình phạt không gian (không cố định) nào khác với chi phí thêm O(Wlg(N))
hình phạt thời gian, trong đó W
số lượng vị trí mảng khác biệt được viết giữa hoạt động xóa và N
là kích thước của mảng. Ví dụ: giả sử một người sẽ lưu trữ các số nguyên từ -2,147,483,647 đến 2,147,483,647 (nhưng không bao giờ -2,147,483,648) và người ta muốn các mục mảng trống đọc là 0. Bắt đầu bằng cách điền vào mảng với -2,147,483,648 (gọi giá trị đóB
). Khi đọc một mảng mảng cho ứng dụng, hãy báo cáo giá trị B
bằng 0. Trước khi viết khe mảng I
, kiểm tra xem nó diễn ra B
và nếu như vậy và I
lớn hơn một, lưu trữ một số không để khe I/4
sau khi thực hiện một kiểm tra tương tự cho vị trí đó (và nếu nó tổ chức B
, I/16
, vv).
Để xóa mảng, bắt đầu I
bằng 0 hoặc 1, tùy thuộc vào cơ sở mảng (thuật toán như mô tả sẽ hoạt động cho một trong hai). Sau đó lặp lại quy trình sau: Nếu mục I
là B
, tăng I
và nếu làm như vậy sẽ mang lại bội số của bốn, chia cho bốn (chấm dứt nếu phép chia mang lại giá trị 1); nếu mục I
này không B
, lưu trữ B
ở đó và nhân I
với bốn (nếu I
bắt đầu từ 0, nhân với bốn sẽ để lại 0, nhưng vì mục 0 sẽ trống, I
sẽ được tăng lên).
Lưu ý rằng người ta có thể thay thế "bốn" hằng số ở trên bằng các số khác, với các giá trị lớn hơn thường yêu cầu gắn thẻ công việc ít hơn, nhưng các giá trị nhỏ hơn thường yêu cầu xóa công việc ít hơn; vì các vị trí mảng được gắn thẻ phải được xóa, giá trị ba hoặc bốn gần như chắc chắn là tối ưu; vì giá trị bốn chắc chắn gần với tối ưu, tốt hơn hai hoặc tám và thuận tiện hơn bất kỳ số nào khác, nó có vẻ là sự lựa chọn hợp lý nhất.