c++ - 搜索位域模板(密码本)

标签 c++ c search bitflags

<分区>

我在密码本中有一堆 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/

相关文章:

c++ - 如何修复 Total bill 变量的显示?

c++ - 使用 VS Express 时在控制台应用程序中使用 CString

mysql - 获取某个项目的最新条目? mysql

android - 我的数据库中的搜索过滤器有问题

elasticsearch - 我应该如何索引和搜索英文连字符?

c++ - 如何从另一个文件加载类 - Visual Studio C++

c++ - 记住组合框的最后一个选择项

c - 递归打印数组,产生奇怪的输出

c - 为什么会出现浮点异常 8?

c++ - 如何将 "jni/*.c/cpp"文件添加到 CMakeLists.txt 文件?