2个坐标的快速哈希,顺序无关紧要?

时间:2016-09-05 05:04:59

标签: python hash hashmap key hashcode

是否有一个公式是2个坐标(a,b)和(c,d)的单向散列到一个整数,其中a,b,c和d是正的?订单在这里很重要,因此在给定(a, b), (c, d)(c, d), (a, b)时,公式应该给出相同的结果。每个坐标点中实际数字的顺序((a, b)(b, a)不同)。速度是关键,公式应该快,并且具有O(1)复杂度。

注意 - 我现在正在做的是使用Python的sort在sort中对这两个坐标进行排序,然后将它们用作Python内置字典中的键(因此,内置散列)。我需要一种更快的方法来做到这一点,这样我就可以自己将两个坐标哈希到一个整数。

1 个答案:

答案 0 :(得分:5)

您可以使用hash() frozenset来实现此目的。

>>> hash(frozenset([(10, 20), (11, 22)]))
1735850283064117985
>>> hash(frozenset([(11, 22), (10, 20)]))
1735850283064117985

Frozensets是专门为这种用例设计的(即frozensets是本质上无序的集合,它们是不可变的和可散列的。)

希望这个答案能够让你获得所需的权利: - )