Quelle est la complexité temporelle de la recherche du diamètre d'un graphe ?
Le diamètre d'un graphe est le maximum de l'ensemble des distances de trajet les plus courtes entre toutes les paires de sommets d'un graphe.
Je ne sais pas quoi faire à ce sujet, j'ai besoin d'une analyse complète sur la façon de résoudre un problème comme celui-ci.
Réponses:
Mise à jour:
Cette solution n'est pas correcte.
La solution n'est malheureusement vraie (et simple) que pour les arbres! Trouver le diamètre d'un arbre n'a même pas besoin de cela. Voici un contre-exemple pour les graphiques (le diamètre est 4, l'algorithme renvoie 3 si vous choisissez ce ):v
Si le graphique est orienté, c'est plutôt complexe, voici un article prétendant des résultats plus rapides dans le cas dense que d'utiliser des algorithmes pour les chemins les plus courts toutes paires.
Cependant, mon point principal concerne le cas où le graphique n'est pas dirigé et avec des poids non négatifs, j'ai entendu plusieurs fois une astuce intéressante:
Sa complexité est la même que deux premières recherches successives d'ampleur¹, soit si le graphe est connecté².O(|E|)
Cela semblait du folklore mais en ce moment, j'ai encore du mal à obtenir une référence ou à prouver sa correction. Je mettrai à jour lorsque j'atteindrai l'un de ces objectifs. Cela semble si simple que je poste ma réponse en ce moment, peut-être que quelqu'un l'obtiendra plus rapidement.
¹ si le graphique est pondéré, wikipedia semble dire mais je ne suis sûr que de .O(|E|+|V|log|V|) O(|E|log|V|)
² Si le graphique n'est pas connecté, vous obtenez mais vous devrez peut-être ajouter pour choisir un élément de chaque composant connecté. Je ne sais pas si c'est nécessaire et de toute façon, vous pouvez décider que le diamètre est infini dans ce cas.O(|V|+|E|) O(α(|V|))
la source
Je suppose que vous voulez dire que le diamètre de qui est le plus long chemin le plus court trouvée dans .G G
La recherche du diamètre peut être effectuée en recherchant d'abord toutes les paires de chemins les plus courts et en déterminant la longueur maximale trouvée. L'algorithme de Floyd-Warshall le fait en temps . L'algorithme de Johnson peut être implémenté pour atteindre le temps .Θ(|V|3) O(|V|2log|V|+|V|⋅|E|)
Une limite d'exécution plus petite dans le pire des cas semble difficile à atteindre car il y a des distances à considérer et calculer ces distances en temps sublinéaire (amorti) chacune sera difficile; voir ici pour une borne connexe. Notez cet article qui utilise une approche différente et obtient un algorithme (légèrement) plus rapide.O(|V|2)
la source
Vous pouvez également envisager une approche théorique des graphes algébriques. Le diamètre est le plus petit entier st la matrice a la propriété que toutes les entrées de sont non nulles. Vous pouvez trouver par itérations de multiplication matricielle. L'algorithme de diamètre nécessite alors un temps , où est la limite de la multiplication matricielle. Par exemple, avec la généralisation de l'algorithme Coppersmith-Winograd par Vassilevska Williams, l'algorithme de diamètre s'exécuterait en . Pour une introduction rapide, voir le chapitre 3 du livre de Fan Chung ici .diam(G) t M=I+A Mt t O(logn) O(M(n)logn) M(n) O(n2.3727logn)
Si vous limitez votre attention à une classe de graphe appropriée, vous pouvez résoudre le problème APSP en un temps optimal . Ces classes comprennent au moins des graphes d'intervalle, des graphes d'arc de cercle, des graphes de permutation, des graphes de permutation bipartite, des graphes fortement cordés, des graphes bipartis cordés, des graphes héréditaires à distance et des graphes à deux cordes. Par exemple, voir Dragan, FF (2005). Estimation de toutes les paires de chemins les plus courts dans des familles de graphes restreintes: une approche unifiée. Journal of Algorithms, 57 (1), 1-21 et les références qu'il contient.O(n2)
la source
Hypothèses:
1. Le graphique n'est pas pondéré
2. Le graphique est dirigé
O (| V || E |) complexité temporelle.
Algorithme:
Explication:
Nous vérifions le cycle. si le graphe contient un cycle, alors nous continuons à nous déplacer dans la boucle, nous aurons donc une distance infinie. Nous vérifions la connexion. Si le graphe n'est pas connecté, cela signifie le sommet u de G1 au sommet v dans G2. Où G1 et G2 sont deux sous-graphes non connectés. Nous aurons donc à nouveau une distance infinie. Nous utiliserons BFS pour calculer la distance maximale entre un nœud donné (u) et tous les autres nœuds (v) accessibles depuis u. Ensuite, nous prendrons le maximum du diamètre précédemment calculé et le résultat sera renvoyé par BFS. Nous aurons donc un diamètre maximum actuel.
Analyse du temps d'exécution:
Temps total = O (| v || E |) + O (| E |) + O (| E |)
Depuis | V || E | > | E |
nous avons donc le temps d'exécution comme O (| v || E |).
BFS
DFS
Remarque: Ce n'est pas une solution élégante à ce problème.
la source