Prétraitement optimal pour certains types de requêtes

11

Supposons que nous ayons un semi-groupe avec les éléments . Notre objectif est de calculer les produits .S = { s 1 , s 2 , , s n } s is i + 1s j(S,)S={s1,s2,,sn}sjesje+1sj

Dans leur article "Prétraitement optimal pour répondre aux requêtes de produits en ligne", Alon et Schieber prouvent que nous pouvons répondre à chacune de ces requêtes en au plus étapes (où est la fonction Ackermann inverse) en utilisant uniquement quantité linéaire de prétraitement.αO(α(n))α

Si l'on souhaite que chaque requête puisse recevoir une réponse en étapes , peut-on encore le faire avec un prétraitement linéaire uniquement? O ( log ( j - i ) )sjesje+1sjO(Journal(j-je))

(Cette question est inspirée par cette question récente de Brendan McKay à mathoverflow.)

Gjergji Zaimi
la source
1
pouvez-vous ajouter un lien vers la question MO?
Suresh Venkat
1
Y a-t-il une raison pour qu'il s'agisse d'un semi-groupe plutôt que d'un groupe?
Huck Bennett
1
@Huck: S'il s'agit d'un groupe, la construction de Noam dans le lien ci-dessus donne un tel algorithme.
Gjergji Zaimi

Réponses:

2

Construisez un arbre binaire équilibré ordonné avec dans les feuilles (dans l'ordre). Dans chaque nœud interne stocke le produit des feuilles du sous-arbre enraciné en . Ce prétraitement s'exécute évidemment dans le temps et l'espace O .s1,,snvv(n)

Maintenant, pour calculer un produit (où ) parcourez l'arbre de jusqu'à l'ancêtre le moins commun (LCA) de et . Récupérez les produits stockés dans chaque enfant droit suspendu au chemin, à l'exception de l'enfant droit de l'ACV. En d'autres termes, lorsque vous montez de à son parent , si est un enfant gauche de , prenez le produit stocké dans l' enfant droit de . De même, montez de à l'ACV et récupérez les produits stockés chez les enfants de gauche suspendus à ce chemin. Multipliez tous ces produits, avec etsjesjje<jjejejuvuvvjsjesj dans l'ordre.

Ari
la source