没有使用哈希的高效查找?

时间:2014-06-16 20:40:12

标签: python optimization dictionary data-structures hash

所以我正在编写实现ACO算法的this Python program。简而言之,当一只蚂蚁进行下一次移动时,它知道(1)它所在的节点和(2)它仍然需要访问哪些节点。有了这些信息,它会检查每个Edge的属性,以便选择接下来要访问的Node。所以我让ant使用该信息来查找相应的Edge

在内部,我使用dictNode对映射到Edge个实例。最初,我对Node必须可以清洗的限制没问题。然而,它一直是我不特别喜欢的限制,我想尽可能消除它。

目前,我有一个Node类通过散列对象__hash__的{​​{1}}来实现frozenset,但这仍然会导致涉及可变值的案例的错误(和到目前为止,它是我最不喜欢的课程 - 永远)。

到目前为止,我一直在考虑使用2D矩阵,但通常情况是__dict__.items()Edge s相比很少,这会导致稀疏矩阵,因此浪费了很多空间。我考虑过使用一个简单的列表,但后来我放弃了进行超快速查找的能力。

TL; DR:

我可以使用哪些数据结构(首选,如果实现是可靠的)或自我实现,它将从Node对中快速查找Edge s,而不涉及哈希的产生?

1 个答案:

答案 0 :(得分:3)

不是直接散列节点,而是创建节点数组并给出ant节点索引。您的密钥变为两个整数或者可能是一个64位整数,其中一个索引位于高32位,一个索引位于低32位。它仍然基于散列,但实现起来很简单。