A abordagem mencionada acima exige que cada célula seja capaz de manter um número grande o suficiente para manter o número de vezes que a matriz pode precisar ser reinicializada, o que é uma penalidade de espaço substancial. Se um slot é capaz de armazenar pelo menos um valor que nunca será legitimamente gravado, é possível evitar qualquer outra penalidade de espaço (não constante) às custas da adição de uma O(Wlg(N))
penalidade de tempo, onde W
é o número de slots de matriz distintos gravados entre operações de limpeza e N
é o tamanho da matriz. Por exemplo, suponha que alguém armazene números inteiros de -2.147.483.647 a 2.147.483.647 (mas nunca -2.147.483.648) e deseje que os itens da matriz em branco sejam lidos como zero. Comece preenchendo a matriz com -2.147.483.648 (chame esse valorB
) Ao ler um slot de matriz para o aplicativo, relate um valor B
igual a zero. Antes de escrever slot de gama I
, verifique se realizou B
e se assim e I
é maior que um, armazenar um zero a ranhura I/4
após a realização de uma verificação semelhante para esse local (e, se realizada B
, I/16
, etc).
Para limpar a matriz, comece com I
igual a 0 ou 1, dependendo da base da matriz (o algoritmo conforme descrito funcionará para ambos). Repita o procedimento a seguir: Se item I
for B
, incremente I
e, se isso resultar em um múltiplo de quatro, divida por quatro (termine se a divisão gerar um valor de 1); se o item I
não estiver B
, armazene B
-o e multiplique-o I
por quatro (se I
começar em zero, multiplicar por quatro deixará zero, mas como o item 0 ficará em branco, I
será incrementado).
Observe que é possível substituir a constante "quatro" acima por outros números, com valores maiores geralmente exigindo menos marcação de trabalho, mas valores menores geralmente exigindo menos compensação de trabalho; como os slots de matriz marcados precisam ser limpos, um valor de três ou quatro é quase certamente ideal; como o valor quatro certamente está próximo do ideal, é melhor que dois ou oito e é mais conveniente do que qualquer outro número, parece a escolha mais razoável.