相关疑难解决方法(0)

排列的好哈希函数?

我有特定范围内的数字(通常从0到1000左右).算法从该范围中选择一些数字(大约3到10个数字).这种选择经常进行,我需要检查是否已经选择了所选数字的排列.

例如,一步选择[1, 10, 3, 18]另一步,[10, 18, 3, 1]然后第二选择可以被丢弃,因为它是一种置换.

我需要非常快速地进行检查.现在我把所有数组都放在一个hashmap中,并使用一个自定义哈希函数:只需要总结所有元素,所以1 + 10 + 3 + 18 = 32,还有10 + 18 + 3 + 1 = 32.对于equals,我使用bitset来快速检查元素是否在两个集合中(我在使用bitset时不需要排序,但它只在数字范围已知且不太大时才有效).

这样可以正常工作,但是可以产生大量冲突,因此很常调用equals()方法.我想知道是否有更快的方法来检查排列?

排列是否有任何好的哈希函数?

UPDATE

我做了一个基准测试:生成0到6范围内的所有数字组合,以及数组长度1到9.有3003种可能的排列,并且应该在这么多不同的哈希值附近生成一个好的哈希值(我使用32位数字)对于哈希):

  • 仅添加41种不同的哈希(因此存在大量冲突)
  • 8个不同的哈希值用于XOR'ing值
  • 用于乘法的286种不同的哈希值
  • (R + 2e)3003个不同的哈希值和abc建议的乘法值(使用1779033703表示R)

所以abc的哈希值可以非常快速地计算出来并且比其他所有哈希值都要好得多.谢谢!

PS:我不想在不需要时对值进行排序,因为这会变得太慢.

hash performance permutation

12
推荐指数
2
解决办法
5663
查看次数

标签 统计

hash ×1

performance ×1

permutation ×1