Soit un graphe non orienté non pondéré avec sommets et arêtes. Est-il possible de prétraiter et de produire une structure de données de taille afin qu'il puisse répondre aux requêtes de la forme "distance entre et " dans le temps O (n)?n m G m ⋅ p o l y l o g ( n ) u v
Le problème semble trop fondamental pour ne pas être résolu.
Réponses:
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 approximation2 . 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.g m / 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 ( uu v w w ℓ ( 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 ) u N( 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
la source
Ce dont vous avez besoin s'appelle un "oracle à distance". Malheureusement, je ne suis pas très familier avec les oracles de distance, donc je ne peux que vous référer à l'article fondateur dû à Thorup et Zwick:
Mikkel Thorup et Uri Zwick. Oracles de distance approximative. STOC '01, 2001.
Voici un extrait du résumé:
Soit un graphe pondéré non orienté avec | V | = n et | E | = m . Soit k un entier. Nous montrons que G = ( V , E ) peut être prétraité en O ( k m n 1 / k ) temps prévu, en construisant une structure de données de taille O ( k n 1 + 1 / kG=(V,E) |V|=n |E|=m k G=(V,E) O(kmn1/k) , de sorte que toute requête de distance subséquente puisse recevoir une réponse approximative en temps O ( k ) . La distance approximative renvoyée est d'étirement au maximum de 2 k - 1 , c'est-à-dire que le quotient obtenu en divisant la distance estimée par la distance réelle se situe entre 1 et 2 k - 1 . [...] L'encombrement de notre algorithme est [...] essentiellement optimal.O(kn1+1/k) O(k) 2k−1 2k−1
Selon leurs résultats, ce que vous demandez est fondamentalement réalisable même pour les graphiques pondérés: choisir donne un oracle de distance de taille O ( n 2 ) obtenu dans le temps prévu O ( m n ) , qui peut répondre à vos requêtes de chemin le plus court avec 1 -étirer en O ( 1 ) fois!k=1 O(n2) O(mn) 1 O(1)
Les oracles à distance sont un domaine très bien étudié, vous pourrez donc creuser plus loin je crois.
la source