Алгоритм Фарака-Колтона и Бендера — различия между версиями
Kirelagin (обсуждение | вклад) (Первая половина — описание алгоритма, подготавливающего почву. Пока без картинок.) |
Kirelagin (обсуждение | вклад) (Добавлена картинка) |
||
Строка 5: | Строка 5: | ||
== На пути к успеху == | == На пути к успеху == | ||
+ | [[Файл:Sparse_table.png|right|thumb|Построение таблицы <tex>M_i^k</tex>]] | ||
+ | |||
Начнём с рассмотрения алгоритма общей задачи RMQ, требующего <tex>O(log N)</tex> времени на предварительную обработку данных и <tex>O(1)</tex> времени для ответа на каждый запрос. | Начнём с рассмотрения алгоритма общей задачи RMQ, требующего <tex>O(log N)</tex> времени на предварительную обработку данных и <tex>O(1)</tex> времени для ответа на каждый запрос. | ||
Версия 05:33, 5 мая 2011
Алгоритм Фарака-Колтона, Бендера (алгоритм Фарах-Колтона, Бендера) — алгоритм решения специального случая задачи RMQ (поиска минимума на отрезке), в котором соседние элементы входной последовательности различаются на ±1. Может быть использован также для решения задачи LCA.
Вход: последовательность
Выход: ответы на онлайн запросы вида «минимум на отрезке ».
На пути к успеху
Начнём с рассмотрения алгоритма общей задачи RMQ, требующего
времени на предварительную обработку данных и времени для ответа на каждый запрос.Основная идея заключается в том, чтобы предподсчитать ответы для отрезков, длины которых являются степенями двойки. То есть
— минимум на отрезке длины , начинающемся в позиции . Таким образом, таблица имеет размер . Заполнить эту таблицу можно за , если заметить, что и (см. картинку).Пусть теперь необходимо вычислить минимум на отрезке
. Для этого мы покроем этот отрезок двумя отрезками длины (где ) так, чтобы первый отрезок начинался в , а второй заканчивался в . Отрезки, разумеется, будут пересекаться, то это никак не помешает. В этом случае искомый минимум можно найти за константное время как минимум на этих двух блоках, т.е. .
Ссылки
- M. A. Bender and M. Farach-Colton. "The LCA Problem Revisited" LATIN, pages 88-94, 2000