【问题标题】:C++, what is a good way to hash array data?C ++,散列数组数据的好方法是什么?
【发布时间】:2011-01-18 03:41:40
【问题描述】:

我有一个奇怪的问题,我正在集思广益可能的解决方案。问题是这样的:我有许多输入(最多几千个不同的输入),它们在两三个数组中基本上不同(数组的大小通常不同,从一个大小到几千个元素长)。处理数组的函数需要一些时间来初始化数据,所以我想将函数/仿函数与数据一起缓存并将它们存储在地图中。

现在,我该如何将原始数组转换为可用的哈希表类型?我最初想将数组读入字符串并使用字符串作为键。这是个好主意吗?你有更好的建议吗?

【问题讨论】:

  • 您是否需要查找特定键?如果您只想在下一个数据集之后处理一个数据集,我不确定使用哈希表会给您带来什么,这听起来像。
  • @Joe 是的,我确实需要查找密钥。使用相同的函数处理相同的数据 10 次或更多次。
  • 但是你怎么知道你需要再次处理哪一组呢?从您的描述中我不明白的是,您如何在逻辑中知道您需要再次检索哪个数据集?
  • 哪个增长更快,元素的数量或键的大小?如果你散列整个密钥,那么计算一个密钥的散列是 O(key size),这可能很重要。如果您不对整个密钥进行哈希处理,那么仅在末尾不同的密钥就会发生冲突。

标签: c++ hash arrays types


【解决方案1】:

这些数组是整数吗?如果是的话,就用这样的东西

hash = (hash + (324723947 + a[i])) ^93485734985;

如果你对所有字符都这样做,类似的事情对字符串也很有效。 最后,您可以查看extra libs here

【讨论】:

  • 双精度,所以从技术上讲它们可以是整数。
  • 那么它将完美运行。我仍然会将它们散列为整数。
  • 这个哈希函数,碰撞率是多少?我有点担心
  • 对于浮点数,它几乎是完全随机的。所以冲突率完全取决于你的哈希表大小。
猜你喜欢
  • 2012-02-09
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 2011-12-03
  • 1970-01-01
相关资源
最近更新 更多