我可以比朴素哈希表更快地将随机字符串映射到两个类吗?

Can I map random strings to two classes faster than a naive hash table?

本文关键字:两个 映射 字符串 哈希表 随机 我可以      更新时间:2023-10-16

我有大量固定长度的随机字符串(10m+ 字符串要处理,32 个字符,大约 200k 个唯一字符串(,我想将它们映射到两个类别。我知道哪些随机字符串映射到哪个类别,我希望能够流式传输这些字符串并尽快获得它们的类别。

目前我正在使用从字符串到 0/1 的哈希表 (C++ unordered_map(。我是否可以做任何预处理,或者关于我映射到只有两个类别的事实,可以让我更有效地做到这一点?

有多种方法可以使其(可能(更有效率:

  • 对于您的用例,您可以找到更快/更好的哈希算法和/或通常更快的哈希映射实现
  • 预先计算每个字符串的哈希并将其存储在包装结构中可能会提高性能,因为每个字符串仅计算一次哈希
  • 根据您确定哪个字符串对应于哪个类别的方式,有限状态机可以替换哈希映射(这可以是几个简单的分支到像正则表达式这样复杂的东西(。
  • 可能还有更多方法可以提高我现在没有想到的性能

这些优化中的哪一个(如果有的话(实际上提高了性能,需要进行测试。这些只是我会首先尝试的事情。