并行生成晶格簇/图

计算科学 算法 并行计算 图论 组合学
2021-12-25 20:43:33

我正在尝试生成具有n 个或更少顶点的所有图形,这些顶点可以嵌入某些格子中,例如正方形、三角形、Kagome。是否存在枚举绘制这些图的算法?我正在寻找的是一种技术:

  1. 从大小为k的图列表(可能是邻接矩阵格式)开始
  2. 从此列表中生成/绘制所有大小为k+1的图
  3. 消除那些与另一个图断开/同构的图
  4. 继续,直到我得到具有n个顶点的图

哪个已经并行或相当容易并行化。我已经看到建议使用规范标签方案来减少需要在最后通过同构消除的图的数量。我想绘制的所有图表都是平面的,不允许使用不连贯的图表。

[编辑]我也想知道使用邻接矩阵或列表来存储我的图表是否更好 - 因为会有数十万个,我想要一种紧凑的存储方法。

1个回答

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