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


11

Припустимо, у нас є напівгрупа з елементами . Наша мета - обчислити продукти .(S,)S={с1,с2,,сн}сiсi+1сj

У своїй роботі "Оптимальна попередня обробка відповідей на запити в Інтернеті" Алон і Шибер доказують, що ми можемо відповідати на кожен такий запит не більше ніж на кроки (де - зворотна функція Ackermann), використовуючи лише лінійна кількість попередньої обробки.О(α(н))α

Якщо бажано, щоб на кожен запит можна було відповісти на , чи можна це зробити лише за допомогою лінійної попередньої обробки?сiсi+1сjО(журнал(j-i))

(Це питання натхнене цим останнім запитанням Брендана Маккея в Mathoverflow.)


1
ви можете додати посилання на питання про МО?
Суреш Венкат

1
Якась причина, що це напівгрупа, а не група?
Гек Беннетт

1
@Huck: Якщо мова йде про групу, то побудова Ноама у посиланні вище дає такий алгоритм.
Gjergji Zaimi

Відповіді:


2

Побудуйте впорядковане збалансоване двійкове дерево з у листках (по порядку). У кожному внутрішньому вузлі v зберігають добуток листя піддерева, вкоріненого в v . Ця попередня обробка, очевидно, працює в O ( n ) час і простір.с1,,снvv(н)

Тепер, щоб обчислити добуток (де i < j ), переходимо дерево від i до найменш поширеного предка (LCA) з i та j . Зберіть продукти, що зберігаються у кожної правої дитини, що висить на шляху, виключаючи правильну дитину ДМС. Іншими словами, коли ви переходите з u до його батьківського v , якщо u - ліва дитина v , тоді виберіть продукт, що зберігається у правої дитини v . Аналогічно пройдіться від jсiсji<jiijуvуvvjдо ДМС і збирайте продукти, що зберігаються у дітей, які залишилися, що звисають із цього шляху. Помножити всі ці продукти, а також і сек J в порядку.сiсj

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.