Como Chandra Chekuri apontou em um comentário, você pode apenas calcular o fechamento transitivo através da multiplicação rápida da matriz, resolvendo o problema no tempo O ( ) (use seu método favorito, O ( n 2.376 ) via Coppersmith e Winograd, ou mais praticamente usando O de Strassen ( n 2,81 )), e isso seria bom para gráficos densos.nωn2.376n2.81
Agora, afirmo que, se você puder superar esse tempo de execução para o seu problema em gráficos densos, obteria um algoritmo para detecção de triângulo que é mais eficiente do que computar o produto de duas matrizes booleanas. A existência de um algoritmo desse tipo é um grande problema em aberto.
Vou reduzir o problema do triângulo ao problema de alcançabilidade de n pares de DAG. Suponha que recebamos um gráfico G em nós e queremos determinar se G contém um triângulo.
Agora, a partir de G, crie um DAG G 'da seguinte maneira. Crie quatro cópias do conjunto de vértices, , V 2 , V 3 , V 4 . Para cópias u i ∈ V i , v i + 1 ∈ V i + 1 para i = 1 , 2 , 3 , adicione uma borda ( u i , v i + 1 ) iff ( u , v )V1V2V3V4vocêEu∈ VEuvi + 1∈ Vi + 1i = 1 , 2 , 3( uEu, vi + 1)( u , v )estava em G. Agora, se perguntar se existe um caminho entre qualquer um dos pares para todo u ∈ G, então este seria exatamente estar se perguntando se há um triângulo em G . O gráfico atual possui 4 n nós e estamos perguntando sobre n pares. Entretanto, podemos adicionar 2 n nós fictícios isolados e, em vez disso, ter 3 n consultas (adicionando uma consulta para 2 n pares distintos ( y , d ) em que y ∈ V 2( u1, u4)u ∈G4 nn2 n3 n2 n( y, d) e d um manequim), obtendo assim umainstância de 6 n- nó exatamente do seu problema.y∈ V2∪ V3d6 n