Vad sägs om att använda bitmappar för att spela in, för alla möjliga nbr
, om det värdet används eller inte?
För att registrera att ett värde har tagits använd SETBIT
:
SETBIT key [nbr] 1
För att hitta en gratis nbr
använd BITPOS
:
BITPOS key 0
För att undvika tävlingsförhållanden bör du se till att din get-and-set är atomär. [OP tar upp detta i en följdfråga.]
Detta kommer att kräva mycket lite minne (8K byte för 65536 möjliga värden). BITPOS
är O(n), men det är osannolikt att det är ett verkligt problem.