Encuentra un subgrafo conectado con n nodos y e aristas en python.
Tengo un conjunto de datos de un grafo no dirigido muy grande en formato .txt, que convertí en un grafo networkx. Necesito extraer un subgrafo conectado que contenga N nodos (y E aristas si es posible, pero no es necesario). ¿Cómo debo hacerlo? Este es el código que escribí para encontrar el subgrafo conectado más grande:
def encontrar_subgrafo(grafo):
subgrafos_componentes_conectados = (grafo.subgrafo(c) para c en nx.componentes_conectadas(grafo))
subgrafo_mas_grande = max(subgrafos_componentes_conectados, key=len)
devolver subgrafo_mas_grande
El subgrafo que quiero está en algún lugar entre el subgrafo mínimo y el subgrafo máximo. Cualquier ayuda será apreciada.
Editar: Puede ser cualquier conjunto de N nodos, no se requieren nodos específicos.
davy.ai
Para extraer un subgrafo conectado que contenga N nodos de un grafo de networkx, puede modificar el código que ha escrito de la siguiente manera:
Esta función toma dos parámetros: el grafo de networkx y la cantidad deseada de nodos en el subgrafo. Primero encuentra todos los subgrafos de componentes conectados en el grafo usando el método
componentes_conectadas()
. Luego filtra los subgrafos cuyo recuento de nodos es menor que n usando la funciónfilter()
. Los subgrafos resultantes se ordenan en orden descendente según el recuento de nodos usando la funciónsorted()
. Finalmente, se devuelve el primer subgrafo de la lista (que tiene al menos n nodos) usando el métodocopia()
.Tenga en cuenta que esta función asume que hay al menos un subgrafo de componentes conectados con n o más nodos. Si este no es el caso, se generará un
IndexError
. Puede manejar este caso comprobando la longitud de la listasubgrafos_ordenados
antes de acceder a su primer elemento.También tenga en cuenta que esta función solo considera el número de nodos en el subgrafo, no el número de aristas. Si necesita un subgrafo con un número específico de aristas también, puede modificar el código para incluir esa restricción. Una forma de hacer esto es definir una función personalizada para ordenar los subgrafos en función tanto del recuento de nodos como del recuento de aristas, y utilizar esa función en la llamada a
sorted()
.