【发布时间】:2014-06-17 08:15:23
【问题描述】:
给定一个结构上的指针,我需要非常快速找出它是否是集合的一部分(我必须自己定义/实现)。 我可能会考虑像Bloom Filter 这样的技术,但我真的不知道如何在指针上做到这一点。
解决方案需要在 32 位和 64 位机器上运行。
编辑: 所有这些指针(其中 2k-5k)都指向各种随机内存地址,因为它们以我无法控制的双向链表的元素为目标。这可以改写为:“如何通过创建另一个结构在一个元素中查找是只读 双向链表的一部分?”
编辑 2: 双向链表可能会随着时间增长,但不是我控制的集合。
【问题讨论】:
-
解释“集合的一部分”?什么套餐?你的意思是,找出指向结构的指针是否指向这些结构的给定数组的元素?
-
我会更新我的问题,使其更准确,同时:所有这些结构(其中 2k-5k)都出现在我的“某种”双向链表中 zero 控制,但是,除了现有的 DLL 之外,我需要自己创建 set
-
布隆过滤器是概率性的......你同意吗?
-
您想要比遍历列表检查每个节点是否与指针匹配更快的方法吗?如果是这样,您还可以将每个候选指针存储在快速搜索的数据结构中(例如搜索树)。当然,这意味着每次修改链表时都必须维护搜索树(当然也可以在使用之前重建它)。
-
回答“不知道如何在指针上执行”部分,转换为
(uintptr_t)(此转换保证为双射)并使用您将在整数上使用的任何技术
标签: c set bloom-filter