我正在尝试为应该支持以下操作的固定大小集创建数据结构:
- 查询一个元素是否在集合中(假阳性可以,假阴性不行)
- 用另一个元素替换集合中的一个元素
在我的情况下,集合的大小可能非常小(4-16 个元素),但查找必须尽可能快并且读取尽可能少的位。此外,它需要节省空间。替换(即操作 2)可能很少。我研究了以下选项:
- 布隆过滤器:这是标准解决方案。但是,删除元素很困难,因此很难实现操作 2。
- 计算布隆过滤器:空间需求变得比标准布隆过滤器高得多(〜 3-4 倍),因为错误 +ve 率没有降低。
- 简单地存储所有元素的哈希列表:对于类似的空间要求,与计算布隆过滤器相比,提供更好的错误 +ve 率,但查找成本很高(在最坏的情况下,将查找所有位)。
- 以前对位置进行完美散列的想法:我不知道小元素集的快速完美散列。
附加信息:
- 元素是 64 位数字。
关于如何解决这个问题的任何想法?