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

标签 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 的构建排序对两个坐标进行排序,然后将它们用作 Python 内置字典中的键(因此,内置哈希)。我需要一种更快的方法来执行此操作,以便我可以自己将两个坐标散列为一个整数。

最佳答案

您可以使用 hash()frozenset为此。

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

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

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

关于python - 顺序无关紧要的 2 个坐标的快速哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39324220/

相关文章:

perl - 如何根据另一个哈希的键/值删除[子]哈希?

ruby-on-rails - Ruby:IF 语句中的 Nils

python - 从单个 python 脚本或 GUI 按钮运行服务器和客户端 python 脚本

python - 有什么方法可以使用 Selenium Webdriver (firefox) 记录 http 请求/响应吗?

python - 属性错误 : 'FileField' object has no attribute 'File'

java - 为什么库没有正确处理 HashMap 初始容量?

java - HashMap 是在 Java 内部使用 LinkedList 还是 Array 实现的?

python - 在 Python 的 Line2D 中使用属性 "figsize"的等价物是什么

algorithm - 计算哪些字符串将具有相同的散列

java - 当它是 HashMap 的值时添加到 HashSet