我有一个问题要编码。我有一个生成数字 0 到 n-1 的过程,我想在它生成第一个重复元素时停止它。*我正在寻找一种可以快速完成的数据结构。特别是,添加一个新元素并测试一个元素是否在结构中需要很快。预期的插入数量在 sqrt(n) 左右(生日问题),或者实际上更差一些(比如 sqrt(2n)),因为该过程略微偏向于唯一值。换句话说,它相当稀疏——处理多达 10 亿个数字时,只会使用大约 30 或 50,000 个值。
哈希集或某种自平衡二叉树似乎是正确的方法,但也许有更好的方法?对于小的 n,我认为位数组会更好,但我正在查看 10^9 左右的 n,这对于我认为实用而言太大了。
* 实际上,它不需要立即停止——如果它更有效,您可以在块中生成元素并不时检查。
注意:这最初是在 math.se 上发布的,但他们建议我在这里重新发布。它不是研究级别的,因此不适合 cstheory.se。