哈希整数序列

Guy*_*ush 6 hash

我必须处理数字序列,其中序列具有以下属性:

  • 元素是整数,
  • 序列的长度各不相同,不固定,
  • 整数有一个上限,
  • 允许多次出现元素,
  • 元素的顺序无关紧要.

给定一个序列,我想知道这个序列是否已经发生,那就是我想要哈希序列.例如,

[2, 3, 6, 2, 13]
Run Code Online (Sandbox Code Playgroud)

[6, 3, 2, 13, 2]
Run Code Online (Sandbox Code Playgroud)

应具有相同的哈希值.

使用的编程语言是C.

我知道我可以先对序列进行排序,然后将它们存储在trie中,这绝对是一种选择.然而,为此目的,什么是适当的哈希函数?

Sti*_*set 1

将所有数字与序列的长度相乘,然后对某个相当大的数字取模怎么样?下面是一些显示计算结果的 Scala 代码:

val l = List(6, 3, 2, 13, 2)
(l.reduce(_ * _) * l.length) % 10000
Run Code Online (Sandbox Code Playgroud)

结果是:4680。

显然,这并不能保证如果散列匹配,则序列是唯一的。(它甚至可能不是一个很好的近似值!)但是,如果散列不匹配,则可以保证序列不相同。