将长位数组映射到查找表
Mapping long bit arrays to a lookup table
给定一组长度为l(l>64(的n(n<1000(个唯一位数组(例如c++std::位集类模板(,将这些位数组存储在元素从0到n-1的查找表l中的最佳映射是什么?
我想要实现的是:
L["000010001 ... 00101010"] = 0
L["111000000 ... 01000100"] = 1
...
L["001101100 ... 01010111"] = n-1
如果将位数组转换为小数,则不会对其进行排序。
我目前正在使用std::unordered_map<std::bitset<81>, int>
和std::unordereded_map::find,但我觉得有一种更快的方法可以做到这一点
std::unordered_map
具有强大的优势:它存在,经过了广泛的测试,并且经过了优化。
我能想象的唯一替代方案是在对数组(bit_pattern,index(中进行二进制搜索:对于大小<1000.
但是。。。需要代码、测试和基准测试。。。
我现在的白发告诉我:如果它已经存在并满足你的需求,那么就使用它
很大程度上取决于您关心的内容:
- 内存:可能是trie
- 性能:用作稀疏数组的哈希集(通常有比
std::unordered_map
更快的哈希集,并且知道输入域通常可以让你对哈希函数进行大量优化( - 如果它是结构化的,可能只是一个掩码操作
通常,在遗传学中对长的简单序列的索引和搜索进行了广泛的研究,所以也许你可以在那里找到一些算法。
相关文章:
- 如何在多映射的字符串中查找子字符串
- 由并发无序映射查找线程调用的函数是否安全?
- if else VS映射查找
- std::使用迭代器映射查找距离,程序不会终止
- 将长位数组映射到查找表
- 在5d映射C++中查找项目
- 如何在嵌套映射(C++)中高效地查找密钥
- 在多映射中查找键、价值链的长度
- 在矢量中查找映射键的最快方法
- 在两个映射中查找共同值,无需迭代
- 错误:二进制表达式的操作数无效(映射使用查找函数错误)
- 键值映射中的部分查找,其中键本身是键值映射
- 为什么当代码尝试在 STL 映射中查找键时出现分段错误
- C++ 映射查找值和关联的键
- c 映射::查找或映射:: iterator,它是更有效的W.R.T复杂性
- 在 STL 映射中查找字符串键upper_bound
- 在使用无序多映射实现的有向图中查找循环
- C++查找并擦除多映射元素
- 映射与对象键,查找和比较功能
- c++查找映射值和键