【发布时间】:2014-06-30 05:56:38
【问题描述】:
我有一个包含大约一百万个条目的哈希图,键是一个字符串,其值来自 5 个不同输入的组合。 (字符串连接)每个输入的域都很小,但是 5 个输入的组合给出了这个巨大的映射(500K 项)。现在我正在考虑优化这个结构。
我的想法是通过散列每个单独的输入并将这 5 个散列组合成一个散列(int 32 或 64)来散列输入(5 个输入的组合),然后查找该散列。
我的问题是有一个已知的数据结构可以很好地处理这种情况吗?是否值得进行优化?我想优化内存和运行时间。
我正在使用C++ 和std::unordered_map,关键是来自 5 个输入的组合字符串,输出是随机的。我没有发现输入和输出(随机或串行)之间的任何关系。
125 458 699 sadsadasd 5 => 56.
125 458 699 sadsadasd 3 => 57.
125 458 699 sadsadasd 4 => 58.
125 458 699 sadsadasd 5 => 25.
125 458 699 gsdfsds 3 => 89.
每个输入的域都很小(第 4 个输入有 2K 个不同的值,而其他输入只能有大约 20 个不同的值)。
【问题讨论】:
-
“数据结构”是什么意思?您是否正在寻找将多个哈希值组合成单个哈希的好函数?
-
散列连接真的与散列 5 个输入然后以某种方式组合它们不同吗?是什么让您认为这会更优化?
-
@Sneftel 可能是其他数据结构,如树或散列函数,我的计划是为每个输入使用 5 个散列映射以获得 5 个散列,然后将 5 个散列组合成一个散列。但是还有其他数据结构吗?这种优化值得做吗?
-
@Dave 这将通过仅使用 int32 而不是我认为会消耗更多内存的字符串来优化内存。
-
我不明白。你能举例说明这 5 个输入的作用吗?
标签: c++ data-structures hashmap