我正在使用python图库,我正在使用邻接列表。我正在考虑使用xml来表示邻接列表,这样我就可以更容易地存储或读取图形。 对于这样的图表:
A
|\
| \
| \
B---C
邻接看起来像
A:[B,C]
B:[A,C]
C:[A,B]
问题来了,你将如何将其转换为xml?我有一个(非常)有限的xml知识,所以我看起来像:
<graph>
<node>
A
<realtedto>[B,C]</relatedto>
</node>
...
</graph>
这看起来对你好吗?而且,您将如何处理图表可能不简单或有方向性的问题?
答案 0 :(得分:2)
Welp,你可以存储你的链接:
<graph>
<node id="A" />
<node id="B" />
<node id="C" />
<links>
<link first="A" second="B" />
<link first="A" second="C" />
</links>
</graph>
但是,你有奇怪的情况,比如“是A,B和B,A一样”吗?如果你正在进行查找。我可能永远不会采用上述方式。另一方面,如果您这样做,则不会存储重复信息。 (可能,如果您确认以防止逆转)。如果它是有向图,则该副作用可能是一个特征,因为在这种情况下A,B IS 与B,A不同。
请记住,xml隐式地将事物存储在层次结构中,而图形不一定是没有转换的层次结构,因此如果没有某种扭曲,就不可能“直接”表示。我可能会做这样的事情:
<graph>
<node id="A">
<neighbors>
<neighbor id="B" />
<neighbor id="C" />
</neighbors>
</node>
<node id="B">
<neighbors>
<neighbor id="A" />
</neighbors>
</node>
<node id="C">
<neighbors>
<neighbor id="A" />
</neighbors>
</node>
</graph>
不幸的是,您有重复的信息,但是您可以解决排序问题,如果您对其进行反序列化,则始终会引用节点的邻居进行遍历。如果您希望它是有向图,则可以将<neighbors>
分隔为<inlets>
和<outlets>
。如果您不关心能够向后移动,或者只是出口侧的<neighbor>
标签。
如果您希望能够遍历链接,可以将这两种方法结合使用。
这一切都归结为您希望数据具有的功能。