Оптимальная предварительная обработка для определенных типов запросов

11

Предположим, у нас есть полугруппа с элементами . Наша цель - вычислить произведения .S = { s 1 , s 2 , , s n } s is i + 1s j(S,)S={s1,s2,,sn}sisi+1sj

В своей статье «Оптимальная предварительная обработка для ответа на онлайн-запросы продукта» Алон и Шибер доказывают, что мы можем ответить на каждый такой запрос не более чем за шагов (где - обратная функция Аккермана), используя только линейная величина предварительной обработки.αO(α(n))α

Если желательно, чтобы на каждый запрос можно было ответить с помощью шагов , можно ли делать это только с помощью линейной предварительной обработки? O ( журнал ( J - я ) )sisi+1sjO(log(ji))

(Этот вопрос навеян этим недавний вопрос Брендан Маккей в Mathoverflow.)

Герджи Заими
источник
1
Вы можете добавить ссылку на вопрос МО?
Суреш Venkat
1
Есть ли причина для того, чтобы быть полугруппой, а не группой?
Гек Беннетт
1
@Huck: Если это группа, то конструкция Ноама по ссылке выше дает такой алгоритм.
Джерджи Заими

Ответы:

2

Построить упорядоченное сбалансированное двоичное дерево с в листьях (по порядку). В каждом внутреннем узле хранится произведение листьев поддерева с корнем в . Эта предварительная обработка, очевидно, выполняется в O времени и пространстве. v v ( n )s1,,snvv(n)

Теперь, чтобы вычислить произведение (где ), поднимите дерево от до наименее общего предка (LCA) из и . Соберите продукты, хранящиеся у каждого правого ребенка, свисающего с пути, за исключением правого ребенка LCA. Другими словами, когда вы переходите от к его родительскому , если - левый дочерний элемент , тогда выберите продукт, хранящийся в правом дочернем . Аналогичным образом, подойдите от к LCA и соберите продукты, хранящиеся у оставленных детей, свисающих с этого пути. Умножьте все эти продукты вместе с и я < J я я J у v U v v J S I сек Jsisji<jiijuvuvvjsisj в порядке.

Ari
источник