2009-06-04 26 views
10

Cálculo de la k-core de un gráfico por vértices iterativamente la poda es bastante fácil. Sin embargo, para mi aplicación, me gustaría poder agregar vértices al gráfico inicial y obtener el núcleo actualizado sin tener que volver a calcular todo el k-core desde cero. ¿Existe un algoritmo confiable que pueda aprovechar el trabajo realizado en iteraciones anteriores?incrementales algoritmo k-core

Para los curiosos, la k-núcleo está siendo utilizado como una etapa de preprocesamiento en un algoritmo de descubrimiento clique. Se garantiza que cualquier grupo de tamaño 5 formará parte de los 4 núcleos de un gráfico. En mi conjunto de datos, el 4-core es mucho más pequeño que todo el gráfico, por lo que puede forzarlo desde allí. Incrementar la adición de vértices permite que el algoritmo funcione con un conjunto de datos lo más pequeño posible. Mi conjunto de vértices es infinito y está ordenado (números primos), pero solo me importa la camarilla con el número más bajo.

Editar:

Pensando en ello un poco más basado en la respuesta de akappa, la detección de la creación de un bucle es de hecho crítico. En el siguiente gráfico, el núcleo 2 está vacío antes de agregar F. Agregar F no cambia el grado de A, pero agrega A a 2 núcleos. Es fácil extender esto para ver cómo el cierre de un bucle de cualquier tamaño haría que todos los vértices se unieran simultáneamente a los 2 núcleos.

Adición de un vértice puede tener un efecto sobre la coreness vértices de una distancia arbitraria de distancia, pero quizás esto es centrarse demasiado el comportamiento en el peor de los casos.

A -- B; A -- C; A -- D -- E; B -- F; C -- F;

Respuesta

3

Me parece que un algoritmo para un cómputo k-núcleo gradual basado en la exploración local de la gráfica, en lugar de una poda iterativo "global", que necesitaría una detección incremental del bucle con el fin de ver qué bordes podrían contribuir a ingresar un vértice en el núcleo k, que es un problema difícil.

Creo que lo mejor que puedes hacer es recalcular el algoritmo k-core en cada pasada, simplemente eliminando del gráfico los vértices que ya están en el k-core e inicializando, en el vértice del mapa -> "k -core vértices adyacentes "el número de vértices adyacentes que ya están en el k-core.

2

Idea rápida: Puede guardar el historial en una lista L, es decir, guardar el orden en el que se eliminaron los nodos. Siempre que agregue un nuevo nodo v, comience en el primer nodo w en L, que es adyacente a v. Luego, simplemente recorra los nodos restantes en L desde w on en orden lineal. (Y poner a prueba el nodo v, así y posiblemente agregarlo a L.)

3

Es un problema difícil, pero definitivamente no es NP-duro. Hasta donde yo sé, no hay soluciones generales en la academia para la actualización incremental de K-cores con cualquier número K. Pero los siguientes dos documentos son definitivamente dignos de leer:

[1] Extraer Analizar y visualizar Triangle K- Motivos principales dentro de las redes. http://www.cse.ohio-state.edu/~zhangya/ICDE12_conf_full_179.pdf

[2] Transmisión de algoritmos para la k-core descomposición. http://www.cse.ohio-state.edu/~sariyuce/file/Publications_files/VLDB13.pdf

Se aparecieron en premier conferencias en el área de gestión de datos, por lo que la metodología debe ser fiable.

Cuestiones relacionadas