我需要有一个在内存中的数据结构的键值对(400兆字节的数据价值)。我对钥匙有以下限制:
键和值都是长度为256和1024的文本字符串
分别是。
任何键通常看起来都像k1k2k3k4k5,每个k(i)本身就是4-8字节的字符串。一些k(i)可能在钥匙里,也可能不在那里。
每个k(i)都有6-8种可能性。然而,k3和k4有256000种可能性。
可以用前缀键迭代ds。应该为此操作优化DS此操作分配一个迭代器,即它迭代整个ds并返回与前缀键匹配的键值列表(例如“k1k2k3.*”,k(i)如上所定义)。每次迭代都在此迭代器(列表)上迭代。释放迭代器将释放列表。
为字符串键提供ds会使键比较过于昂贵。从而排除了ds(hash,b+树)的某些选项。
我的问题是如何创造性地将字符串键转换为整数键?解决方案需要具有以下属性:
对于键模式“k1k2k3.*”,它应该对整数的上下限进行generate,以便基于这些边界,在DS中只查找少量的条目。
我是在solution towards this
最佳答案
每个k(i)都有6-8种可能性。然而,k3和k4有256000种可能性。
如果您可以在k1 k2 k3 k4 k5中拆分密钥,则可以如下编码:
3 bits for k1
3 bits for k2
18 bits for k3
18 bits for k4
3 bits for k5
这是45位。
所以你可以把你的键归结为一个0到2^45-1之间的整数。
这种接缝很多,特别是如果你只使用一些可能的k3和k4值。
所以我要取k1 k2的6位来精确映射到一个索引,而不是取决于k3 k4的密度,k3和k4的某种树结构,以及k5的精确映射。