映射与多面体图作为键

时间:2012-11-11 19:20:05

标签: data-structures graph dictionary map graph-theory

我想要一个数据结构,其中键是多面体(无向3个连接的平面图;在我的情况下,它们可能大多数是<30个顶点),查找等式是同构。有没有一种有效的方法来实现这种映射?

我已经研究并反思了一点,但没有提出解决方案。似乎解决方案可能是

之一
  • 使用图表本身查找数据的自定义数据结构

  • 二进制搜索树(或其他类似树),需要明确定义的排序。 (我怀疑存在这样的排序)

  • 哈希表,需要良好的哈希值。我不能立即想出一个比“顶点数”或类似的更好的。

如何才能获得高效的查询?

2 个答案:

答案 0 :(得分:5)

每个多面体图都是平面的。平面图的同构问题是多项式时间。它没有一般图同构问题的未知但思想很大的复杂性。虽然效率很高,但算法并不简单,依赖于一些相当深入的数学分析。

原始论文(据我所知)是霍普克罗夫特1971年的论文 An N log N算法,用于平面三次连通图的同构,可从斯坦福获得scanned copy。关于这个问题有相当多的工作。最近的一篇论文是Algorithm and Experiments in Testing Planar Graphs for Isomorphism,它具有对现有算法的许多引用以及它们之间的运行时间比较的优点。本文提出了一种算法,为每个图形分配一个唯一的代码,顺便提一下,它也生成一个明确定义的顺序。他们在小图中的最佳结果是Practical Graph Isomorphism中Brendan McKay的算法。

答案 1 :(得分:2)

由于图形同构不容易检查,我建议最小化同构检查的数量。您的哈希表似乎是一个良好的开端。你需要一把好钥匙才能最大化分辨率

假设您使用数组[V,out_1,in_1,out_2,in_2,...]V = NR顶点,out_i =第i个最高出度,in_1 =与第i最高出度(在出度第一排序,然后在入度)的节点的入度。这会稍微有点效率(但你可能已经想到了类似的东西)然后是你的nr顶点。

上面是一个相当粗略的例子,你实际上可以使用任何(组合)graph invariant作为你的表的键。根据您拥有的图形数量及其相似性,您应该选择能够提供最大差异/分辨能力的图形(如果所有图形具有相同数量的顶点,则使用nr顶点是无用的。)

使用不变量,您可以构建树,也可以使用它们来创建所需的顺序。上面的数组示例可用于定义完整订单,但您可以再次使用任何不变的