Contar triângulos em gráficos gerais pode ser feito trivialmente em e acho que fazer muito mais rápido é difícil (referências bem-vindas). E os gráficos planares? O procedimento simples a seguir mostra que isso pode ser feito em . Minha pergunta é dupla:O ( n log n )
- O que é uma referência para este procedimento?
- O tempo pode ser linear?
A partir da prova algorítmica do teorema do separador planar de Lipton-Tarjan, podemos, no tempo linear no tamanho do gráfico, encontrar uma partição de vértices do gráfico em três conjuntos modo que não haja arestas com um ponto final em e o outro em , têm tamanho delimitado por e ambos têm tamanhos superiores delimitados por do número de vértices. Observe que qualquer triângulo no gráfico fica inteiramente dentro de ou inteiramente dentro de ou usa pelo menos um vértice de com os outros dois vértices de ou ambos de . Portanto, basta contar o número de triângulos no gráfico em e os vizinhos de em (e da mesma forma para ). Observe que e seus vizinhos induzem um gráfico planar -outer (o referido gráfico é um subgrafo de um gráfico planar de diâmetro ). Assim, a contagem do número de triângulos em um gráfico desse tipo pode ser feita diretamente por programação dinâmica ou por uma aplicação do teorema de Courcelle (sei com certeza que essa versão de contagem existe no mundo do Logspace por Elberfeld et al. E estou supondo que ela também exista no mundo linear do tempo), já que formar um triângulo não-direcionado é um e como é fácil obter uma decomposição em árvore de largura limitada a partir de um gráfico planar incorporado de -outer.
Assim, reduzimos o problema a um par de problemas, cada um deles uma fração constante menor, à custa de um procedimento de tempo linear.
Observe que o procedimento pode ser estendido para encontrar a contagem do número de instâncias de qualquer gráfico conectado fixo dentro de um gráfico de entrada no tempo .