<分区>
我在密码本中有一堆 8 位值(大约 200 个)。
我的程序将生成一个 8 位值以响应输入,我需要在密码本中找到所有(甚至第一个有用的)具有相同位集的匹配项。未设置的位无关紧要。
你能想出一种最佳方法来 a) 存储和 b) 搜索密码本以找到所有匹配项吗?我有一个标准的线性搜索,但效率很低。
非常感谢...
阿克凡
<分区>
我在密码本中有一堆 8 位值(大约 200 个)。
我的程序将生成一个 8 位值以响应输入,我需要在密码本中找到所有(甚至第一个有用的)具有相同位集的匹配项。未设置的位无关紧要。
你能想出一种最佳方法来 a) 存储和 b) 搜索密码本以找到所有匹配项吗?我有一个标准的线性搜索,但效率很低。
非常感谢...
阿克凡
最佳答案
当然,虽然空间效率不是很高,但您当然可以预先计算所有 256 位模式的匹配项。您将拥有 256 个列表的数组,每个列表将包含密码本中的每个代码以及这些位集。
可以在256字节(内存的11个字)中得到第一个匹配。
初始化:
u_int8_t bitpatterns[256];
memset(bitpatterns,0,sizeof(bitpatterns));
for(x=sizeof(codebook)-1;x>=0;x--)
for(y=0;y<256;y++)
if (y&codebook[x] == y)
bitpatterns[y] = x;
查找:
codeword = codebook[bitpatterns[input]];
关于c++ - 搜索位域模板(密码本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6270399/