Algorithm 稀疏位向量的散列
有没有人对稀疏位向量的哈希函数有什么好的直觉? 举一个具体的例子,假设我想散列一个4096位的整数,其中每一位为1的概率为10% 我想在散列中得到一些压缩。例如4096位输入和32位输出。这只是一个例子来说明我在寻找什么。当然,非常感谢您的回答。您能帮忙吗Algorithm 稀疏位向量的散列,algorithm,hash,Algorithm,Hash,有没有人对稀疏位向量的哈希函数有什么好的直觉? 举一个具体的例子,假设我想散列一个4096位的整数,其中每一位为1的概率为10% 我想在散列中得到一些压缩。例如4096位输入和32位输出。这只是一个例子来说明我在寻找什么。当然,非常感谢您的回答。您能帮忙吗 如果位向量是2^32位,那么为什么不使用32位整数呢?我会像往常一样通过调用 hash<vector<bool>>(...) hash(…) 如果您使用的是C++0x,或者请参阅boost::hash。请说明您需要
如果位向量是2^32位,那么为什么不使用32位整数呢?我会像往常一样通过调用
hash<vector<bool>>(...)
hash(…)
如果您使用的是C++0x,或者请参阅boost::hash。请说明您需要哪种类型的hash。在Java和.NET中,哈希代码(用于哈希表等)是以32位整数开始的-因此显而易见的答案是返回原始值。我想这不是你想要的,所以更清晰一些是值得欢迎的。也许32位太小了。假设它是1024位,或者其他更大的值。我想压缩一下。所以32位输入->32位输出不是我想要的。您可能需要修改您的语句“如果位向量是2^32位”;]有趣。您知道Bloom过滤器的哈希函数使用什么吗?例如,对于32位整数(根据原始编辑),您可以有一个大小为2^16位的向量,如果设置了整数n/(2^16),则设置位n。然后,如果您想知道x是否在原始数据中,那么如果设置了位x/(2^16),您就知道“是”或“可能”(永远不知道“否”)。如果数据集稀疏且搜索成本高,则可以使用。有关压缩数据的更多信息和想法,请参阅《编程珍珠》(Programming Pearls)一书: