Structure de données pour les chemins les plus courts


19

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 vGnmGmpolylog(n)uv

Le problème semble trop fondamental pour ne pas être résolu.


1
En réponse à votre dernière remarque sur «trop basique pour ne pas être résolu»: si la question doit être répondue dans un temps constant, elle est en effet bien étudiée. Mais le point de votre question est que vous autorisez O (n) le temps pour une requête (au lieu de O (1) ou O (m) trivial). Bien que je pense que c'est une question intéressante, je ne pense pas que la question soit d'une importance fondamentale.
Tsuyoshi Ito

1
@TsuyoshiIto - Je ne vois pas pourquoi la question perd son "importance fondamentale" si elle permet un temps de requête super constant mais sub-linéaire. Par exemple, supposons que je puisse résoudre le problème ci-dessus avec la contrainte que les requêtes de distance peuvent être répondues en temps O(n1ε) pour certains ε>0 , et le temps de traitement est au plus O(n3ε) - cela ne me donnerait-il pas un algorithme sub-cubique pour calculer les chemins les plus courts? Je pense personnellement que c'est une question très intéressante.
Rachit

Je ne sais pas s'il existe un moyen général ou non, mais il existe un bon moyen dans les graphiques de largeur d'arbre borné, voir Requête du chemin le plus court dans les graphiques de largeur d'arbre borné
Saeed

De plus, si m=Ω(n2) vous pouvez créer un arbre de chemin le plus court (à partir de chaque nœud) puis répondre à la requête de chemin le plus court (par racine liée) dans O(n) , ou de la même manière, vous pouvez construire une donnée structure avec moins de mémoire.
Saeed

Réponses:


9

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 .d(u,(u))d(v,(v))d(u,(u))+d((u),v)d(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 technique ci-dessus n'exploite pas le fait que votre graphique d'entrée n'est pas pondéré; peut-être qu'il y a quelque chose d'intéressant que vous pouvez faire en exploitant ce fait, mais je ne peux pas penser à un moyen de récupérer des distances exactes. Par exemple, il est possible de réduire le temps de requête à et d'obtenir une distance limitée par 2 d + 1 , où d est la distance exacte entre u et v . O(n2/m)2d+1duv
Rachit

J'ai réalisé que je ne comprends pas pourquoi il s'agit d'une approximation 2. Thorup-Zwick dans les mêmes situations donne 3-approx.
ilyaraz

@ilyaraz: Notez que le schéma de Thorup-Zwick ne nécessite pas de vérifier (et donc, répond aux requêtes en temps presque constant). Voir le papier que j'ai mentionné ci-dessus pour la preuve d'étirement 2 . Γ(u)Γ(v)2
Rachit

4

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|=mkG=(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)2k12k1

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=1O(n2)O(mn)1O(1)

Les oracles à distance sont un domaine très bien étudié, vous pourrez donc creuser plus loin je crois.


2
Version du journal: JACM 2005 .
Tsuyoshi Ito

3
En utilisant l' espace , on peut naïvement stocker une table de correspondance. Donc, cet article (dont j'étais au courant) n'est pas pertinent ici. O(n2)
ilyaraz

1
C'est suffisant. Le résultat le plus proche de ce que vous demandez est pour autant que je sache graphiques avec degré moyen qui donne des chemins d'étirement-2 avec O ( n 3 / 2 ) d' espace dans O ( Θ(logn)O(n3/2)temps de requête. (R. Agarwal, P. Godfrey et S. Har-Peled, «Requêtes de distance approximative et routage compact dans les graphiques clairsemés», INFOCOM 2011.)O(n)
Gabor Retvari

En utilisant l'intégration de mesures de Bourgain dans , on peut trouver un oracle avec l'espace O ( n log 2 n ) , le temps de requête O ( log 2 n ) et l'erreur multiplicative O ( log n ) . 1O(nlog2n)O(log2n)O(logn)
ilyaraz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.