Tengo un gráfico no ponderado no dirigido G = (V, E) y un subconjunto S elegido al azar de sus vértices. Quiero comprobar si los vértices en S son mutuamente adyacentes (es decir, formar un subgrafo/una camarilla completa).
I tienen el siguiente algoritmo (pseudo-código):Algoritmo rápido para averiguar si un subgráfico inducido está completo
foreach vertex in S {
// Check that the vertex has enough edges
if (vertex.edges.count < S.size - 1)
return false;
// Check that there is an edge to each vertex in S
foreach vertex2 in S {
if (!vertex.hasEdgeTo(vertex2))
return false;
}
}
return true;
El problema es que el rendimiento del peor caso de este algoritmo es O (| V |) (en el caso cuando el subconjunto S contiene toda los vértices de un gráfico completo).
Mi pregunta es: ¿hay un algoritmo más rápido que se ejecute con una mayor complejidad de O peor caso?
No quiere decir _O (| V | ²) _? – Svante
Puede reducir a la mitad el factor constante comprobando cada borde una sola vez. Para eso, el bucle interno debe ejecutarse solo a través de todos los vértices que aún no se manejen en el exterior. Esto no da una mejor _O_ complejidad, por supuesto. – Svante
Sí, es O (| V |^2) en lugar de O (| E |^2), corregido. Sé que pude hacerlo la mitad del tiempo, omití eso por claridad. Gracias por tus comentarios. –