Cómo encontrar un circuito de Euler en un gráfico en tiempo lineal

Para un gráfico no dirigido,

A continuación se presentan algunas propiedades interesantes de gráficos no dirigidos con una ruta y ciclo euleriano. Podemos usar estas propiedades para encontrar si un gráfico es euleriano o no.

  • Ciclo de Euler: un gráfico no dirigido tiene un ciclo de Euleriano si se cumplen dos condiciones siguientes.
  1. Todos los vértices con grados distintos de cero están conectados. No nos interesan los vértices con cero grados porque no pertenecen al Ciclo o Camino Euleriano (solo consideramos todos los bordes).
  2. Todos los vértices tienen un grado par.
  • Ruta de Eulerian: Un gráfico no dirigido tiene Ruta de Eulerian si se cumplen las dos condiciones siguientes.
  1. Igual que la condición 1 para el Ciclo Euleriano.
  2. Si cero o dos vértices tienen un grado impar y todos los demás vértices tienen un grado par. Tenga en cuenta que solo un vértice con grado impar no es posible en un gráfico no dirigido (la suma de todos los grados siempre es par en un gráfico no dirigido)

Para un gráfico dirigido,

Un gráfico dirigido tiene un ciclo euleriano si se cumplen las siguientes condiciones. (Fuente: Wiki)

  1. Todos los vértices con un grado distinto de cero pertenecen a un único componente fuertemente conectado.
  2. El grado de entrada y salida de cada vértice es el mismo.

Podemos detectar componentes conectados individualmente usando la implementación basada en DFS de Kosaraju.
Para comparar en grado y fuera de grado, necesitamos almacenar en grado y fuera de grado de cada vértice. El grado de salida se puede obtener por tamaño de la lista de adyacencia. En grados se puede almacenar creando una matriz de tamaño igual al número de vértices.

Para ambos, la complejidad del tiempo es O (| V | + | E |)

Espero que esto ayude

More Interesting

¿Alguien puede mostrarme la relación de recurrencia?

¿Por qué es importante la teoría del tipo de homotopía?

¿Volver a la Universidad para estudiar Matemáticas me ayudará a comprender completamente la lógica del algoritmo de la IA y la Programación Funcional?

No puedo encontrar el máximo / mínimo de este problema del multiplicador de Lagrange sin obtener un número complejo cerca del final. ¿Qué estoy haciendo mal?

¿Qué es una explicación intuitiva del cifrado homomórfico?

¿Qué vale la pena aprender antes de ir a la carrera de ciencias de la computación para tener éxito allí?

¿Cuál es el significado y el beneficio de las variables compartidas en Theano?

¿Qué es lo contrario de una máquina de Turing? ¿Existe una máquina teórica que ya esté configurada para calcular algún algoritmo de la manera más directa?

¿Cuántas veces es más rápida la búsqueda binaria que la búsqueda secuencial cuando se busca el elemento 592 en una lista de 1024 elementos?

¿Qué campos \ conceptos matemáticos deben conocer los lingüistas?

¿Es la arquitectura de las computadoras de Von Neumann, se basó en su trabajo ... o fue alguien más?

¿Cómo programar gráficos matemáticos con python? ¿Hay algún paquete que los incluya?

¿Cómo escribiría una función que encuentre la entrada máxima n tal que f (n) <c en el tiempo O (lg n)?

¿Cómo contar el número de todos los tipos topológicos en un DAG dado? ¿Puedes dar algún ejemplo en este gráfico?

¿Por qué es P vs NP un problema importante para resolver?