В общем случае, Равенство графа - это проблема, о которой неизвестно, что ее можно решить за полиномиальное время; с практической точки зрения это означает, что это может быть фактически невозможно решить за разумное время (хотя неизвестно, что оно является 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.