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