Los gráficos me interesa son grafos bipartitos con una raíz especificado vértice. Porque hay una raíz, todos los vértices están graduadas por su distancia desde la raíz. Debido a que el grafo es bipartito, los vértices en profundidad $d$ sólo alguna vez conectados a otros vértices en las profundidades $d \pm 1$ (y, en particular, no de la profundidad de $d$).
Cuando me representan estos gráficos, I orden de los vértices en cada profundidad, y el registro de los bordes por una serie de matrices, esencialmente la lista de las matrices de adyacencia de cada profundidad a la siguiente. (Es decir, la totalidad de la matriz de adyacencia es simétrica y el bloque de tridiagonal, con cero diagonal de bloques. Acabo de escribir el superdiagonal bloques.)
Ahora, si puedo cambiar el orden de los vértices a cierta profundidad (esto sólo permutes las filas de una matriz y las columnas de la siguiente), obviamente tengo la misma gráfica. Me gustaría un algoritmo que recoge un orden particular en cada profundidad, para cada gráfico, la producción de una "forma canónica", con las siguientes propiedades:
- el algoritmo es idempotente, aplicar una segunda vez no hace nada,
- el algoritmo es estable, en el sentido de que si usted acaba de ver en la primera $d$ profundidades de un gráfico y ver que el gráfico ya está 'en forma canónica', entonces cuando se produce una forma canónica para el conjunto de la gráfica de los primeros a $d$ profundidades no son cambiadas, y
- como muchos isomorfo gráficos como sea posible son identificados!
Puede que no sea posible satisfacer a 3. completamente; por ejemplo, la identidad de la operación cumple 1. y 2., pero hace un muy mal trabajo en 3. No es esencial para mi aplicación que cada isomorfo par de gráficas en las que se identifican. (Yo estaría usando este algoritmo para acelerar una combinatoria de búsqueda de ciertos tipos de gráficos, donde sé que estoy innecesariamente la producción de muchos isomorfo copias de la misma gráfica, pero los detalles de la búsqueda requieren que use esta representación.)
¿Alguien sabe de un algoritmo? ¿Alguien puede sugerir algo bueno?