c++ - 有效地索引 "Hash"值集

标签 c++ hash lookup lookup-tables

首先是免责声明;哈希对于我的目标来说是一个有点不准确的术语,请随意建议一个更好的标题。

无论如何,我目前正在尝试编写一个实时运行的复杂空间算法。为了节省周期,我决定生成一个包含所有 32,000 种可能性的查找表。

如果我按照惯例这样做,值(包括范围和字段计数)2x +0 -> +15 和 3x -2 -> +2 将分别映射到两个四位值和三个三位值,给我的查找表大小为 2 ^ (2*4 + 3*3) = 131,072 个条目,浪费了将近 410%

鉴于算法的性质,冲突绝对会削弱其功能(因此除非我能保证与所有相关值不发生冲突,否则不会使用传统的哈希函数)。除此之外,我正在使用的结构相当大(即,我/真的/想避免分配超过我需要的 200%)。最后,由于这个表将被如此频繁地引用,我想避免传统哈希表在桶查找和过于复杂的哈希函数中的开销。

采用更传统的计算机科学方法后,我开始坚信解决方案在于一些我完​​全不知道的碱基转换数学。知道是否是这种情况吗?

最佳答案

您可以通过将每个元素相乘来计算索引,方法与计算最大组合数的方法相同。将每个元素从最重要到最不重要,加上一个常数,使其范围从 0 到 n-1,然后乘以剩余的组合数。

给定 a、b 的 0 到 15 值(范围 16)和 c、d、e 的 -2 到 +2 值(范围 5):

index = a * 16*5*5*5 + b * 5*5*5 + (c+2) * 5*5 + (d+2) * 5 + (e+2);

关于c++ - 有效地索引 "Hash"值集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23942681/

相关文章:

javascript - 如何使用 v8::Arguments 应用回调?

php - 一个字符串的 md5 散列可以在一个地方与另一个地方不同吗?

ruby-on-rails - 如何在哈希中创建哈希

regex - 是否可以编写另一个 ARRAYFORMULA 的 ARRAYFORMULA

c++ - Visual Studio C++ 项目管理。如何处理项目中的非代码文件?

c++ - 如何在算术编码中将 double 转换为二进制形式?

git - 为什么同一个 git 脚本会产生不同的哈希值?

带有 $lookup 的 MongoDB 聚合仅包括(或投影)一些要从查询返回的字段

ejb - 查找远程 Bean,在 JBoss 7.1 中获取 EjbNamingContext

c++ - Microsoft 虚拟音频设备驱动程序示例 (MSVAD) 仅创建 44 字节文件