Una garra es un . Un algoritmo trivial detectará una garra en el tiempo . Se puede hacer en , donde es el exponente de la multiplicación de matriz rápida, de la siguiente manera: tome el subgrafo inducido por para cada vértice , y encuentre un triángulo en su complemento.
Hasta donde yo sé, estos algoritmos básicos solo se conocen. Spinrad enumeró en su libro "representaciones gráficas eficientes" la detección de una garra en el tiempo como un problema abierto (8.3, página 103). Para el límite inferior, sabemos que un algoritmo de tiempo implicará un algoritmo tiempo máximo para encontrar un triángulo. Por lo tanto, podemos considerar como un límite inferior.
Pregunta:
- Hay algún progreso en esto. ¿O algún progreso en demostrar que es imposible?
- ¿Existen otros problemas naturales con los algoritmos de tiempo que son los mejores?
Observación:
- Estoy pidiendo explícitamente la detección de una garra, en lugar del reconocimiento de gráficos sin garras. Aunque un algoritmo generalmente resuelve ambos, hay pocas excepciones.
- Se afirma en el Manual de Algoritmos y Ciencias de la Computación Teórica que se puede encontrar en tiempo lineal, pero era solo un error tipográfico (ver "representaciones gráficas eficientes").
graph-theory
graph-algorithms
graph-classes
Yixin Cao
fuente
fuente
Respuestas:
Creo que podemos hacer un poco mejor que para gráficos densos, usando la multiplicación de matriz rectangular. Eisenbrand y Grandoni utilizaron una idea similar ("Sobre la complejidad de la camarilla de parámetros fijos y el conjunto dominante", Theoretical Computer Science Volume 326 (2004) 57–67) para la detección de 4 camarillas.O(n1+ω)
Sea la gráfica en la que queremos detectar la existencia de una garra. Deje que sea el conjunto de pares de vértices en (ordenadas) . Considere la siguiente matriz booleana de tamaño: cada fila está indexada por alguna , cada columna está indexada por alguna , y la entrada correspondiente es una si y solo si , y . Considere el producto matriz booleana de y su transpuesta . El gráfico tiene una garra si y solo si existeG=(V,E) A V M |V|×|A| u∈V (v,w)∈A {u,v}∈E {v,w}∈E {u,w}∉E M MT G {u,v}∉E
tal que la entrada de en la fila indexada por y la columna indexada por es una.MMT u v
La complejidad de este algoritmo es esencialmente la complejidad de calcular el producto booleano de una matriz por una matriz , donde denota el número de vértices en el gráfico. Se sabe que dicho producto matricial se puede calcular en el tiempo , que es mejor que para el límite superior más conocido en . Por supuesto, si (como se conjetura), entonces los dos enfoques dan la misma complejidad .n×n2 n2×n n O(n3.3) O(n1+ω) ω ω=2 O(n3)
fuente
No sé cómo evitar hacer multiplicaciones matriciales, pero puedes analizarlo de tal manera que el tiempo sea efectivamente el de un número menor de ellos. Este truco es den
Kloks, Ton; Kratsch, Dieter; Müller, Haiko (2000), "Encontrar y contar eficientemente pequeñas subgrafías inducidas", Information Processing Letters 74 (3–4): 115–121, doi: 10.1016 / S0020-0190 (00) 00047-8, MR 1761552.
La primera observación es que, cuando vas a multiplicar matrices, las matrices no son realmente , sino donde es el grado de cada vértice, porque lo que estás buscando es un co-triángulo en la vecindad de cada vértice.n×n d×d d
Segundo, en un gráfico sin garras, cada vértice debe tener vecinos . De lo contrario, el conjunto de vecinos tendría muy pocos bordes para evitar tener un triángulo en el complemento. Entonces, cuando estás haciendo multiplicaciones matriciales, solo necesitas hacerlo en matrices de tamaño lugar de .O(m−−√) O(m−−√) n
Además, cada borde puede contribuir al tamaño del problema de multiplicación de matrices para solo dos vértices, sus puntos finales. El peor de los casos ocurre cuando los para el tamaño total de estos problemas de multiplicación de matrices se distribuyen en subproblemas de tamaño cada uno, lo que da un límite de tiempo total de , una mejora para gráficos dispersos sobre el límite mencionado por R B.2m O(m−−√) O(m ( 1 + ω ) / 2 )O(nm ω / 2 )O(m−−√) O(m(1+ω)/2) O(nmω/2)
fuente