Вышеупомянутый подход требует, чтобы каждая ячейка могла содержать число, достаточно большое, чтобы удерживать количество повторных инициализаций массива, что является существенным штрафом пространства. Если слот способен содержать по крайней мере одно значение, которое никогда не будет записано законным образом, можно избежать любого другого (непостоянного) штрафа за пробел за счет добавления O(Wlg(N))
штрафа по времени, где W
число отдельных интервалов массива, записанных между операции очистки и N
это размер массива. Например, предположим, что один будет хранить целые числа от -2 147 483 647 до 2 147 483 647 (но никогда не -2 147 483 648), а один хочет, чтобы пустые элементы массива читались как ноль. Начните с заполнения массива -2,147,483,648 (вызовите это значениеB
). При чтении слота массива для приложения укажите значение B
ноль. Перед записью слота массива I
, проверьте, удерживается ли он, B
и если да, то I
больше ли он , сохраните нулевое значение в слоте I/4
после выполнения аналогичной проверки для этого местоположения (и, если оно удерживается B
, I/16
и т. Д.).
Чтобы очистить массив, начните с I
0 или 1, в зависимости от базы массива (описанный алгоритм будет работать для любого из них). Затем повторите следующую процедуру: если item I
is B
, increment I
и, если при этом получается кратное четырем, разделите на четыре (прекратите, если в результате деления получится значение 1); если элемента I
нет B
, сохраните B
его и умножьте I
на четыре (если I
начинается с нуля, умножение на четыре оставит ноль, но, поскольку элемент 0 будет пустым, I
будет увеличен).
Обратите внимание, что можно заменить константу «четыре» выше другими числами, с большими значениями, обычно требующими меньшего количества рабочих меток, но меньшими значениями, как правило, требующими меньшего количества очистки работы; поскольку помеченные слоты массивов должны быть очищены, значение три или четыре почти наверняка является оптимальным; поскольку значение четыре, безусловно, близко к оптимальному, лучше, чем два или восемь, и более удобно, чем любое другое число, это может показаться наиболее разумным выбором.