C'est une question très intéressante. À un niveau élevé, vous vous demandez si l'on peut prétraiter un graphique de telle sorte que les requêtes de chemin le plus court deviennent indépendantes de la densité du graphique, sans utiliser beaucoup d'espace supplémentaire - intéressant, mais comme vous le dites, non résolu.
Si vous êtes satisfait des distances approximatives, voici un moyen d'obtenir une approximation 2 . Soit g un graphe non orienté pondéré avec n nœuds et m arêtes. Il est montré dans l'article suivant que pour les requêtes de distance approximative, la conception de structures de données pour des graphiques avec m bords n'est pas plus difficile que des graphiques dans lesquels chaque nœud a un degré délimité par m / n :
R. Agarwal, PB Godfrey, S. Har-Peled, requêtes de distance approximative et routage compact dans des graphiques clairsemés, INFOCOM 2011
Supposons donc que est un graphe borné à m / n degrés. Échantillon α = O ( m / n ) noeuds uniformes de façon aléatoire; appeler ces nœuds de référence. Pendant la phase de prétraitement, stockez la distance de chaque nœud repère à chaque autre nœud dans le graphique; cela nécessite un espace O ( m ) . Pour chaque nœud u , stockez son nœud repère le plus proche ℓ ( u ) . En outre, stockez le graphique dans la structure de données, par exemple sous forme de liste d'adjacence.gm / nα = O ( m / n )O ( m )uℓ ( u )
Lorsqu'on demande la distance entre et v , faites pousser des boules autour des deux nœuds - la boule du nœud w est définie comme l'ensemble des nœuds qui sont strictement plus proches de w que de son nœud de repère le plus proche, disons ℓ ( w ) . On peut montrer que la taille de chaque balle est O ( n 2 / m ) , dans l'attente. Soit Γ ( u ) = B ( u ) ∪ N ( B ( u ) ) , où B ( uuvwwℓ ( w )O ( n2/ m)Γ ( u ) = B ( u ) ∪ N( B ( u ) ) est la boule du nœud u et N ( B ( u ) ) est l'ensemble des voisins des nœuds dans B ( u ) . On peut montrer que la taille de Γ ( u ) est O ( n ) , dans l'attente.B ( u )uN( B ( u ) )B ( u )Γ ( u )O ( n )
Répondre à la requête: si , renvoyer min x ∈ Γ ( u ) ∩ Γ ( v ) { d ( u , x ) + d ( v , x ) } ; sinon si d ( u , ℓ ( u ) ) ≤ d ( v , ℓ ( vΓ ( u ) ∩ Γ ( v ) ≠ ∅minx ∈ Γ ( u ) ∩ Γ ( v ){ d( u , x ) + d( v , x ) } , retourne d ( u , ℓ ( u ) ) + d ( ℓ ( u ) , v ) ; sinon retourner d ( v , ℓ ( v ) ) + d ( ℓ ( v ) , u ) . Il est facile de montrer qu'il s'agit d'uneapproximation 2 .ré( u , ℓ ( u ) ) ≤ d( v , ℓ ( v ) )ré( u , ℓ ( u ) ) + d( ℓ ( u ) , v )ré( v , ℓ ( v ) ) + d( ℓ ( v ) , u )2
En termes de temps de requête, notez que la croissance des boules prend du temps pour un graphique borné à m / n degrés; la construction de Γ ( u ) et Γ ( v ) compte tenu des boules respectives prend du temps O ( n ) (puisque les voisins sont stockés dans la structure de données); et vérifier si Γ ( u ) ∩ Γ ( v ) est vide ou non prend également du temps O ( n ) .O(n)m/nΓ(u)Γ(v)O(n)Γ(u)∩Γ(v)O(n)
Les limites ci-dessus sont attendues; Je pense qu'il est facile de dérandomiser la construction. Malheureusement, cette technique ne semble pas permettre d'obtenir une approximation meilleure que . C'est une question très intéressante cependant ...2