首先,免责声明;对于我的目标,哈希是一个有点不准确的术语,请随时提出更好的标题。
无论如何,我目前正试图编写一个实时运行的复杂空间算法。为了节省周期,我决定生成一个包含所有32,000种可能性的查找表。
如果我按常规方式进行此操作,则值(包含范围和字段数)2x + 0 - > +15和3x -2 - > +2将分别映射到两个四位和三个三位值,给我一个查找表大小为2 ^(2 * 4 + 3 * 3)= 131,072个条目,几乎 410%浪费< /强>
鉴于算法的性质,冲突绝对会削弱其功能(因此除非我能保证不会与所有相关值发生冲突,否则不会传统的哈希函数)。除此之外,我正在使用的结构相当大(即,我会/真的/喜欢避免分配超过我需要的200%)。最后,由于这个表经常被引用,我希望避免在桶查找和过于复杂的哈希函数中传统哈希表的开销。
采用更传统的计算机科学方法后,我开始坚信解决方案在于基础转换的一些数学,我完全不知道。不知道是不是这样吗?
答案 0 :(得分:1)
您可以通过乘以每个元素,以与计算最大组合数相同的方式计算索引。将每个元素从最显着到最不重要,添加一个常数使其范围从0到n-1,并乘以剩余的组合数。
给出你的0到15的a,b(16的范围)和-2到+2的c,d,e(范围5)的值:
index = a * 16*5*5*5 + b * 5*5*5 + (c+2) * 5*5 + (d+2) * 5 + (e+2);