graph6格式如何工作?

时间:2017-06-13 22:18:23

标签: graph

我一直在寻找关于.g6或graph6格式如何工作的地方,我不知道它是如何工作的我发誓它就像魔术一样。

F?B~w

这是以ASCII形式表示的图形。它可以由Wolfram Mathematica,Sage和Maple解释,仅举几例并给我们一个视觉效果。但是,经过几个小时潜入Sage的开源代码后,我无法为我的生活弄清楚他们如何能够将其视为图形。

我想知道是否有可能在上面的图中搜索Hamiltonian Cycles而不必将它们转换为邻接矩阵?或者,如果不可能,我们如何将其转换为邻接矩阵?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

Oliver Charlesworth已经提供了reference to the format description,但简而言之,基本思路是以ASCII可打印字符对邻接矩阵的图形大小和上三角进行编码。

  1. 从原始无向图中,计算邻接矩阵。 这保证是对称的,所以我们关心的是鞋帮 该矩阵的三角形,不包括对角线 同样为零。

  2. 接下来,通过遍历上部来构建大小为n*(n-1)/2的位向量 矩阵的三角形逐行。例如,对于4x4矩阵 遍历将是(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)。

  3. 使用图形大小n(作为二进制字)预先添加位向量,并将结果位向量分解为每个6位的块。

  4. 将每个6位块转换为63到126范围内的整数,然后将每个块转换为相应的ASCII字符并将它们连接起来。

  5. 请注意,graph6格式不支持有向图或加权图。我相信它是由Brendan McKay创建的(在nauty source中有它的实现)并且有两种相关格式:sparse6(用于稀疏图)和digraph6(用于有向图)。

    digraph6格式似乎相当新(在nauty 2.6中添加)并且类似于graph6,除了为了处理有向图,格式编码整个邻接矩阵减去对角线,而不仅仅是上三角。