如何创建一个哈希函数,其中整数的不同排列形成相同的键?



例如2098696208应该生成相同的键(但不是098629862,因为前导零意味着它甚至不是5位数,所以我们忽略它们)。一种选择是获得最小/最大排序的排列,然后排序的数字是哈希键,但排序对我的情况来说太昂贵了。我需要在0(1)时间内生成键。我的另一个想法是遍历这个数,得到每个数字的频率,然后得到一个哈希函数。现在,在给定0<= Summation(f[i]) <= no_of_digits.

的情况下,组合频率的最佳函数是什么?

要创建顺序不敏感的哈希,只需对每个值(在您的情况下是数字的数字)进行哈希,然后使用交换函数(例如加法/乘法/异或)将它们组合起来。异或可能是最合适的,因为它保持一个恒定的哈希输出大小,并且非常快。

同样,在散列数之前,您将需要去掉所有前导0。

最新更新