Il y a eu quelques questions ( 1 , 2 , 3 ) sur l'achèvement transitif ici qui m'ont fait penser si quelque chose comme ça était possible:
Supposons que nous obtenions un graphe orienté en entrée et que nous souhaitions répondre aux requêtes de type " ?", C'est-à-dire demander s'il existe une arête entre deux sommets dans l'achèvement transitif d'un graphe ? (de manière équivalente, "existe-t-il un chemin de à dans ?").
Supposons qu'après donné, vous êtes autorisé à exécuter le prétraitement au temps et ensuite requis pour répondre aux requêtes au temps .
Évidemment, si (c'est-à-dire qu'aucun prétraitement n'est autorisé), le mieux que vous puissiez faire est de répondre à une requête dans le temps . (exécutez DFS de à et retournez true s'il existe un chemin).
Un autre résultat trivial est que si , vous pouvez calculer la fermeture transitive puis répondre aux requêtes dans .
Et quelque chose au milieu? Si vous êtes autorisé, disons temps de prétraitement, pouvez-vous répondre aux requêtes plus rapidement que ? Peut-être l'améliorer en ?
Une autre variante est la suivante: supposez que vous disposez d'un temps de prétraitement , mais uniquement de l' espace , pouvez-vous utiliser le prétraitement pour répondre à des requêtes plus efficaces que ?
Pouvons-nous dire quelque chose en général sur le compromis qui permet de répondre à de telles requêtes?
Une structure de compromis quelque peu similaire est considéré dans les systèmes GPS, où la tenue d' une table de routage complète de toutes les distances par paires entre les emplacements est infaisable il est donc en utilisant l'idée de Oracles distance qui stocke une table partielle mais permet SpeedUp requête importante sur le calcul de la distance de l'ensemble graphique (ne donnant généralement qu'une distance approximative entre les points).