某些类型查询的最佳预处理


11

假设我们有一个半群,其元素S = { s 1,s 2,… ,s n }。我们的目标是计算产品的小号我 ∘ 小号我+ 1 ∘ ⋯ ∘ 小号Ĵ。(S,∘)S={s1,s2,…,sn}si∘si+1∘⋯∘sj

Alon和Schieber在他们的论文“用于回答在线产品查询的最佳预处理”中证明,仅使用线性量,我们最多可以以步(其中α是逆阿克曼函数)回答每个这样的查询。预处理。O(α(n))α

如果期望,每个查询可以在回答Ö (日志(Ĵ - 我))的步骤,可以在一个仍然只要这样做线性预处理?si∘si+1∘⋯∘sjO(log⁡(j−i))

(这个问题的灵感来自这个最近布伦丹·麦凯在Mathoverflow问题。)


1
您可以向MO问题添加链接吗?
— Suresh Venkat

1
有什么理由让它成为半团体而不是团体?
— 哈克·贝内特

1
@哈克:如果是一个小组,那么上面链接中的Noam构造将给出这样的算法。
— Gjergji Zaimi 2011年

Answers:


2

用叶子中的构造一个有序的平衡二叉树。在每个内部节点v中,存储以v为根的子树的叶子的乘积。这种预处理显然在O (n )时间和空间上进行。s1,…,snvv(n)

现在,计算产品(其中我< Ĵ)在树起来从我来的最低共同祖先(LCA)我和Ĵ。收集存储在远离路径的每个正确子项中的产品,不包括LCA的正确子项。换句话说,当您从u升至其父v时,如果u是v的左孩子,则提取存储在v的右孩子中的乘积。同样,从j走si∘…∘sji<jiijuvuvvj到LCA,并收集存放在离开该路径的左儿童中的产品。将所有这些乘积以及和s j依次乘以。sisj

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.