所以我正在编写实现ACO算法的this Python program。简而言之,当一只蚂蚁进行下一次移动时,它知道(1)它所在的节点和(2)它仍然需要访问哪些节点。有了这些信息,它会检查每个Edge
的属性,以便选择接下来要访问的Node
。所以我让ant使用该信息来查找相应的Edge
。
在内部,我使用dict
将Node
对映射到Edge
个实例。最初,我对Node
必须可以清洗的限制没问题。然而,它一直是我不特别喜欢的限制,我想尽可能消除它。
目前,我有一个Node
类通过散列对象__hash__
的{{1}}来实现frozenset
,但这仍然会导致涉及可变值的案例的错误(和到目前为止,它是我最不喜欢的课程 - 永远)。
到目前为止,我一直在考虑使用2D矩阵,但通常情况是__dict__.items()
与Edge
s相比很少,这会导致稀疏矩阵,因此浪费了很多空间。我考虑过使用一个简单的列表,但后来我放弃了进行超快速查找的能力。
我可以使用哪些数据结构(首选,如果实现是可靠的)或自我实现,它将从Node
对中快速查找Edge
s,而不涉及哈希的产生?
答案 0 :(得分:3)
不是直接散列节点,而是创建节点数组并给出ant节点索引。您的密钥变为两个整数或者可能是一个64位整数,其中一个索引位于高32位,一个索引位于低32位。它仍然基于散列,但实现起来很简单。