L'approche susmentionnée nécessite que chaque cellule soit capable de contenir un nombre suffisamment grand pour contenir le nombre de fois que la matrice peut avoir besoin d'être réinitialisée, ce qui représente une pénalité d'espace substantielle. Si un slot est capable de contenir au moins une valeur qui ne sera jamais légitimement écrite, on peut éviter d'avoir une autre pénalité d'espace (non constante) au détriment de l'ajout d'une O(Wlg(N))
pénalité de temps, où W
est le nombre de slots de tableau distincts écrits entre opérations de suppression et N
correspond à la taille du tableau. Par exemple, supposons que l'on stocke des entiers de -2 147 483 647 à 2 147 483 647 (mais jamais -2 147 483 648) et que l'on souhaite que les éléments de tableau vides soient lus comme des zéros. Commencez par remplir le tableau avec -2 147 483 648 (appelez cette valeurB
). Lors de la lecture d'un emplacement de baie pour l'application, indiquez une valeur B
égale à zéro. Avant d' écrire fente de réseau I
, vérifier si elle lieu B
et si oui , et I
est supérieur à un, stocker un zéro à fente I/4
après avoir effectué un contrôle similaire pour cet emplacement (et, si elle lieu B
, I/16
etc.).
Pour effacer le tableau, commencez par I
égal à 0 ou 1, selon la base du tableau (l'algorithme tel que décrit fonctionnera pour l'un ou l'autre). Répétez ensuite la procédure suivante: Si item I
est B
, incrémentez I
et, si cela donne un multiple de quatre, divisez par quatre (terminez si la division donne une valeur de 1); si l'élément I
ne l'est pas B
, stockez B
-le et multipliez-le I
par quatre (s'il I
commence à zéro, la multiplication par quatre le laissera à zéro, mais puisque l'élément 0 sera vide, I
sera incrémenté).
Notez que l'on pourrait remplacer la constante "quatre" ci-dessus par d'autres nombres, avec des valeurs plus grandes nécessitant généralement moins d'étiquetage de travail, mais des valeurs plus petites nécessitant généralement moins d'effacement de travail; comme les emplacements de tableau marqués doivent être effacés, une valeur de trois ou quatre est presque certainement optimale; comme la valeur quatre est certainement proche de l'optimale, meilleure que deux ou huit, et plus pratique que n'importe quel autre nombre, cela semble le choix le plus raisonnable.