事实证明,我最初的问题与我实际需要做的事情有些正交。由于从列表 (E,V) 开始并将其映射到特定晶格是“困难的”,因此我们选择从假定的晶格类型开始。在这种情况下,我们使用格子上的坐标指定图形,因此正方形格子上的 4 循环将是:(0,0), (0,1), (1,0), (1,1)。使用这种表示,很容易将新站点添加到图表中(有四个可能的位置,检查站点是否已经存在)。这也阻止了我们生成断开连接的图。如果两个顶点是格最近邻,我们将它们定义为由一条边连接。由于我们对“不同”图有几种不同的含义(取决于我们使用的哈密顿量,它在二面体组下可能是不同的,在 x 反射但不是 y 反射、不同的邻接列表等下不同),我们实现了几个函数来检查不同类型的同构,这取决于我们使用的哈密顿量。我们使用简单的字典排序方案来规范不同的图,这使我们能够消除大量相似的图。为了检查一个图是否是另一个图的子图,我们检查它的格坐标是否都可以移动一个常数向量,以便结果列表的元素都可以在较大图的格坐标中找到。尽管我们还没有实现任何并行化,但检查每个图的子图似乎是可并行化的(因为带有 我们实现了几个函数来检查不同类型的同构,这取决于我们使用的哈密顿量。我们使用简单的字典排序方案来规范不同的图,这使我们能够消除大量相似的图。为了检查一个图是否是另一个图的子图,我们检查它的格坐标是否都可以移动一个常数向量,以便结果列表的元素都可以在较大图的格坐标中找到。尽管我们还没有实现任何并行化,但检查每个图的子图似乎是可并行化的(因为带有 我们实现了几个函数来检查不同类型的同构,这取决于我们使用的哈密顿量。我们使用简单的字典排序方案来规范不同的图,这使我们能够消除大量相似的图。为了检查一个图是否是另一个图的子图,我们检查它的格坐标是否都可以移动一个常数向量,以便结果列表的元素都可以在较大图的格坐标中找到。尽管我们还没有实现任何并行化,但检查每个图的子图似乎是可并行化的(因为带有 为了检查一个图是否是另一个图的子图,我们检查它的格坐标是否都可以移动一个常数向量,以便结果列表的元素都可以在较大图的格坐标中找到。尽管我们还没有实现任何并行化,但检查每个图的子图似乎是可并行化的(因为带有 为了检查一个图是否是另一个图的子图,我们检查它的格坐标是否都可以移动一个常数向量,以便结果列表的元素都可以在较大图的格坐标中找到。尽管我们还没有实现任何并行化,但检查每个图的子图似乎是可并行化的(因为带有n + 1如果所有图都是非同构的,则顶点只能具有n子图的顶点图或以下图),尝试在图的所有可能位置添加站点并规范化不同的图。