Алгоритм Фарака-Колтона и Бендера
Версия от 19:45, 9 мая 2011; Kirelagin (обсуждение | вклад)
Алгоритм Фарака-Колтона, Бендера (алгоритм Фарах-Колтона, Бендера) — применяется для решения специального случая задачи RMQ (поиск минимума на отрезке), в котором соседние элементы входной последовательности различаются на ±1. Может быть использован также для решения задачи LCA.
Вход: последовательность
Выход: ответы на онлайн запросы вида «минимум на отрезке ».
На пути к успеху
Начнём с рассмотрения алгоритма решения общей задачи RMQ, требующего
времени на предварительную обработку данных и времени для ответа на каждый запрос.Основная идея заключается в том, чтобы предподсчитать ответы для отрезков, длины которых являются степенями двойки. То есть
— минимум на отрезке длины , начинающемся в позиции . Таким образом, таблица имеет размер . Заполнить эту таблицу можно за динамически, если заметить, что и (см. картинку).Пусть теперь необходимо вычислить минимум на отрезке
. Для этого мы покроем этот отрезок двумя отрезками длины (где ) так, чтобы первый отрезок начинался в , а второй заканчивался в . Отрезки, разумеется, будут пересекаться, то это никак не помешает. В этом случае искомый минимум можно найти за константное время как минимум на этих двух покрывающих отрезках, т.е. .
Ссылки
- M. A. Bender and M. Farach-Colton. "The LCA Problem Revisited" LATIN, pages 88-94, 2000