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 i ∘ s i + 1 ∘ ⋯ ∘ s j
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.α
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 ) )
(Cette question est inspirée par cette question récente de Brendan McKay à mathoverflow.)
cc.complexity-theory
graph-theory
ds.data-structures
Gjergji Zaimi
la source
la source
Réponses:
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, … , Sn v v ( 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 etsje∘ … ∘ sj i < j je je j u v u v v j sje sj dans l'ordre.
la source