Qual é a complexidade temporal de encontrar o diâmetro de um gráfico ?
O diâmetro de um gráfico é o máximo do conjunto das menores distâncias do caminho entre todos os pares de vértices em um gráfico.
Não tenho idéia do que fazer, preciso de uma análise completa sobre como resolver um problema como esse.
Respostas:
Atualizar:
Esta solução não está correta.
Infelizmente, a solução é verdadeira (e direta) para árvores! Encontrar o diâmetro de uma árvore nem precisa disso. Aqui está um contra-exemplo para gráficos (o diâmetro é 4, o algoritmo retorna 3 se você escolher este ):v
Se o gráfico for direcionado, isso é bastante complexo, eis alguns trabalhos que reivindicam resultados mais rápidos no caso denso do que usar algoritmos para os caminhos mais curtos de todos os pares.
No entanto, meu ponto principal é sobre o caso de o gráfico não ser direcionado e com pesos não negativos, ouvi um truque interessante várias vezes:
Sua complexidade é igual a duas primeiras buscas sucessivas¹, ou seja, se o gráfico estiver conectado².O ( | E| )
Parecia folclore, mas, no momento, ainda estou lutando para obter uma referência ou provar sua correção. Atualizarei quando atingir um desses objetivos. Parece tão simples que eu posto minha resposta agora, talvez alguém entenda mais rápido.
¹ se o gráfico for ponderado, a wikipedia parece dizer mas só tenho certeza sobre O ( | E | log | V | ) .O ( | E| + | V| registro| V| ) O ( | E| registro| V| )
² Se o gráfico não estiver conectado, você obtém mas pode ser necessário adicionar O ( α ( | V | ) ) para selecionar um elemento de cada componente conectado. Não tenho certeza se isso é necessário e, de qualquer maneira, você pode decidir que o diâmetro é infinito neste caso.O ( | V| + | E| ) O ( α ( | V| )))
fonte
Presumo que significa que o diâmetro de que é o maior caminho mais curto encontrado em G .G G
A localização do diâmetro pode ser feita localizando primeiro todos os caminhos mais curtos do par e determinando o comprimento máximo encontrado. O algoritmo de Floyd-Warshall faz isso em . O algoritmo de Johnson pode ser implementado para obter O ( | V | 2 log | V | + | V |Θ(|V|3) .O(|V|2log|V|+|V|⋅|E|)
Um limite de tempo de execução menor, na pior das hipóteses, parece difícil de obter, pois existem distâncias ) a serem consideradas e o cálculo dessas distâncias no tempo sublinear (amortizado), cada um será difícil; vejaaquipara um limite relacionado. Observeesteartigo que usa uma abordagem diferente e obtém um algoritmo (um pouco) mais rápido.O(|V|2)
fonte
Você também pode considerar uma abordagem teórica de gráfico algébrico. O diâmetro é a menor inteiro t r a matriz M = I + A tem a propriedade de que todas as entradas de H t é diferente de zero. Você pode encontrar t por O ( log n ) iterações da multiplicação de matrizes. O algoritmo de diâmetro requer tempo O ( M ( n ) log n ) , onde M ( n )diam ( G ) t M= I+ A Mt t O ( logn ) O ( M( N ) logn ) M( N ) é o limite para multiplicação de matrizes. Por exemplo, com a generalização do algoritmo de Coppersmith-Winograd por Vassilevska Williams, o algoritmo de diâmetro seria executado em . Para uma rápida introdução, consulte o Capítulo 3 no livro de Fan Chung aqui .O ( n2,3727registron )
Se você restringir sua atenção a uma classe de gráfico adequada, poderá resolver o problema do APSP no tempo ideal de . Essas classes incluem pelo menos gráficos de intervalo, gráficos de arco circular, gráficos de permutação, gráficos de permutação bipartidos, gráficos fortemente cordais, gráficos bipartidos cordais, gráficos hereditários à distância e gráficos duplamente cordais. Por exemplo, veja Dragan, FF (2005). Estimando todos os pares de caminhos mais curtos em famílias de gráficos restritos: uma abordagem unificada. Jornal de Algoritmos, 57 (1), 1-21O ( n2) e suas referências.
fonte
Pressupostos:
1. O gráfico não é ponderado
2. O gráfico é direcionado
Complexidade temporal O (| V || E |).
Algoritmo:
Explicação:
Verificamos o ciclo. se o gráfico contiver ciclo, continuaremos movendo-nos no loop, e assim teremos uma distância infinita. Verificamos se está conectado. Se o gráfico não estiver conectado, significa o vértice u de G1 ao vértice v em G2. Onde G1 e G2 são dois subgráficos que não estão conectados. Então, teremos uma distância infinita novamente. Usaremos o BFS para calcular a distância máxima entre um determinado nó (u) e todos os outros nós (v) que são acessíveis a partir de u. Então, tomaremos o máximo do diâmetro previamente calculado e o resultado retornado pelo BFS. Então, teremos o diâmetro máximo atual.
Análise do tempo de execução:
Tempo total = O (| v || E |) + O (| E |) + O (| E |)
Desde | V || E | > | E |
então temos o tempo de execução como O (| v || E |).
DFS do BFS
Nota: Esta não é uma solução elegante para este problema.
fonte