标签: integer-hashing

以与订单无关的方式散列一组整数

我想散列一组整数,使得整数的顺序对计算的散列值没有影响.即H([32224,12232,564423]) == H([564423,32224,12232]).

唯一集的数量将在几百万的范围内.速度非常重要,但我需要通过选择的方法知道碰撞的上限.

维基百科有一个很好的关于散列向量的部分,但我不明白它背后的数学是在代码中自信地实现它们.如果有人能解释一些代码涉及的数学,我将不胜感激.理想情况下,我希望最终的哈希值为32位.如果它有用 - 我将用Java实现它.

更新:由于性能原因(在许多此类集上运行),我特别希望避免对集合中的整数进行排序.

java hash integer-hashing

9
推荐指数
2
解决办法
5625
查看次数

是否可以为整个整数范围实现通用散列?

我正在阅读关于整数的Universal散列.该先决条件和强制性先决条件似乎是我们选择一个素数p大于设定的所有可能的密钥更大.

我不清楚这一点.

如果我们的密钥集是类型,int那么这意味着素数需要是下一个更大的数据类型,例如long.

但最终无论我们得到什么,因为哈希需要下载到一个int来索引哈希表.这种降级是否会以某种方式影响Universal Hashing的质量(我指的是桶上的密钥分配)?

hash types integer-hashing

8
推荐指数
1
解决办法
550
查看次数

如何从给定数字的连续范围集中查找范围

所以简单地说,这就是我想要做的:

我有一组Range连续的对象(非重叠,它们之间没有间隙),每个对象包含一个startendint,以及对另一个对象的引用obj.这些范围不是固定大小(第一个可能是1-49,第二个是50-221等).这个系列可能会变得非常大.

我希望找到一种方法来查找包含给定数字的范围(或更具体地说,它引用的对象),而不必遍历整个集合,检查每个范围以查看它是否包含该数字.这些查找将频繁执行,因此速度/性能是关键.

有谁知道可能帮助我的算法/方程?我是用Java写的.如果需要,我可以提供更多细节,但我想我会尽量保持简单.

谢谢.

java math lookup integer-hashing

7
推荐指数
1
解决办法
458
查看次数

python:在列表中查找匹配的元组

在另一个2元组列表中找到匹配的2元组的最快方法是什么?

以下代码效率极低.loc1和loc2是(x,y)坐标的元组列表.

loc3=[]
for loc in loc1:
    if loc in loc2:
        loc3.append(loc)
Run Code Online (Sandbox Code Playgroud)

我认为哈希是关键但不确定如何在Python上做到这一点.请教我一个优雅的代码.谢谢.

python tuples list integer-hashing

2
推荐指数
1
解决办法
2633
查看次数

Java Hashcode提供整数溢出

背景资料:

在我的项目中,我正在将强化学习(RL)应用于Mario域.对于我的状态表示,我选择使用带有自定义对象的哈希表作为键.我的自定义对象是不可变的,并且覆盖了.equals()和.hashcode()(由IntelliJ IDE生成).

这是生成的.hashcode(),我在注释中添加了可能的值作为额外信息:

@Override
public int hashCode() {
    int result = (stuck ? 1 : 0);                // 2 possible values: 0, 1
    result = 31 * result + (facing ? 1 : 0);     // 2 possible values: 0, 1 
    result = 31 * result + marioMode;            // 3 possible values: 0, 1, 2
    result = 31 * result + (onGround ? 1 : 0);   // 2 possible values: 0, 1 
    result = 31 * result + (canJump ? 1 …
Run Code Online (Sandbox Code Playgroud)

java hash integer-overflow hashcode integer-hashing

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