Co powiesz na używanie bitmap do nagrywania, dla każdego możliwego nbr
? , czy ta wartość jest używana, czy nie?
Aby zarejestrować, że wartość jest pobierana, użyj SETBIT
:
SETBIT key [nbr] 1
Aby znaleźć bezpłatny nbr
użyj BITPOS
:
BITPOS key 0
Aby uniknąć warunków wyścigowych, musisz upewnić się, że twoje get and set jest atomowe. [OP odnosi się do tego w pytaniu uzupełniającym.]
Będzie to wymagało bardzo mało pamięci (8K bajtów dla 65536 możliwych wartości). BITPOS
to O(n), ale raczej nie stanowi to prawdziwego problemu.