Hvad med at bruge bitmaps til at optage, for enhver mulig nbr
, om den værdi bruges eller ej?
For at registrere, at en værdi er taget, brug SETBIT
:
SETBIT key [nbr] 1
For at finde en gratis nbr
brug BITPOS
:
BITPOS key 0
For at undgå løbsforhold skal du sørge for, at dit get-and-set er atomart. [OP behandler dette i et opfølgende spørgsmål.]
Dette vil kræve meget lidt hukommelse (8K bytes for 65536 mulige værdier). BITPOS
er O(n), men det er næppe et reelt problem.