繁体   English   中英

比较Boost Graph Library创建的2个图表

[英]Comparing 2 graphs created by Boost Graph Library

这可能是一个相当新手甚至是错误的问题所以请原谅。 有没有办法比较使用Boost Graph Library创建的2个图表=>在内存中创建的1个图表和从存档中加载的第2个图表(即第2个是先前序列化的)?

我没有在BGL的文档中看到运算符==,但不确定这是否意味着我必须同时编写遍历和比较。 任何指向教程,参考页面或示例的指针都会非常有用

在此先感谢Ganesh

Boost.Graph可以这样做但不能使用==运算符: http//www.boost.org/doc/libs/1_39_0/libs/graph/doc/isomorphism.html

这是一个难题,所以大型图表需要很长时间。

在一般情况下, Graph Equality是一个在多项式时间内不易处理的问题; 实际上,这意味着在合理的时间内解决它可能是有效的(尽管不知道是NP完全的 )。 但是,如果您担心顶点标签也相同,则只需迭代两个图形中的所有边缘,并确保每个边缘也在另一个图形中。

编辑 :如果顶点标签(与每个顶点相关联的值)在两个图上都相同,并且是唯一且可比的,我们可以轻松地检查O(V lg V + E lg E)中的同构,如下所示:

If |G1| != |G2|, the graphs are non-equal. Abort.

i = 0
For each vertex V in G1:
  G1_M[Label(V)] = V
  G1_I[V] = i
  i = i + 1

For each vertex V in G1:
  G1_E[V] = sort(map(λDestination -> G1_I[Destination]) Edges[V])

For each vertex V in G2:
  If G1_M[Label(V)] does not exist, the graphs are non-equal. Abort.
  G2_corresp[V] = G1_M[Label(V)]
  G2_I[V] = G1_I[G2_corresp[V]]

For each vertex V in G2:
  G1_E[V] = sort(map(λDestination -> G2_I[Destination]) Edges[V])
  Compare G1_E[G2_corresp[V]] and G2_E[V]. If non-equal, the graphs are non-equal. Abort.

If we get here, the graphs are equal.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM