Запрос режима диапазона
![]() | Эта статья может быть слишком технической для понимания большинства читателей . ( Апрель 2014 г. ) |
В структурах данных проблема запроса режима диапазона требует построить структуру данных на основе некоторых входных данных, чтобы эффективно отвечать на запросы, запрашивающие режим любого последовательного подмножества входных данных.
Постановка задачи
[ редактировать ]Учитывая массив , мы хотим ответить на запросы вида , где . Режим любого массива это элемент такая, что частота больше или равна частоте . Например, если , затем потому что оно встречается три раза, тогда как все остальные значения встречаются меньше раз. В этой задаче запросы запрашивают режим подмассивов вида .
Теорема 1
[ редактировать ]Позволять и быть любыми мультимножествами . Если это режим и , затем это режим .
Доказательство
[ редактировать ]Позволять быть способом и быть его частота в . Предположим, что не является способом . Таким образом, существует элемент с частотой это режим . С это режим и это , затем . Таким образом, должен быть режим что является противоречием.
Результаты
[ редактировать ]Космос | Время запроса | Ограничения | Источник |
---|---|---|---|
[ 1 ] | |||
размер слова | [ 1 ] | ||
[ 2 ] | |||
[ 1 ] | |||
[ 2 ] |
Нижняя граница
[ редактировать ]Любая структура данных, использующая клетки биты, которые нужны каждому время для ответа на запрос режима диапазона. [ 3 ]
Это контрастирует с другими проблемами запроса диапазона, такими как запрос минимального диапазона, решения которого предлагают постоянное время запроса и линейное пространство. Это связано со сложностью модовой задачи, поскольку даже если мы знаем моду и режим , не существует простого способа вычисления режима . Любой элемент или может быть режим. Например, если и его частота , и и его частота также , может быть элемент с частотой в и частота в . , но его частота в больше, чем частота и , что делает лучший кандидат на чем или .
Структура данных линейного пространства со временем запроса квадратного корня
[ редактировать ]Этот метод Chan et al. [ 1 ] использует пространство и время запроса. Установив , мы получаем и границы пространства и времени запроса.
Предварительная обработка
[ редактировать ]Позволять быть массивом, и быть массивом, содержащим различные значения A, где количество различных элементов. Мы определяем быть массивом таким, что для каждого , содержит ранг (должность) в . Массивы может быть создан путем линейного сканирования .
Массивы создаются также такие, что для каждого , . Затем мы создаем массив , такой, что для всех , содержит ранг в . И снова линейное сканирование достаточно для создания массивов и .
Теперь можно отвечать на запросы вида «частота в по меньшей мере " в постоянное время, проверяя, .
Массив разделен B на блоки , каждый размера . Таким образом, блок охватывает . Режим и частота каждого блока или набора последовательных блоков будут предварительно рассчитаны в двух таблицах. и . это режим или, что эквивалентно, режим , и сохраняет соответствующую частоту. Эти две таблицы могут храниться в пространстве и может быть заселен в путем сканирования раз, вычисляя строку каждый раз по следующему алгоритму:
algorithm computeS_Sprime is input: Array B = [0:n - 1], Array D = [0:Delta - 1], Integer s output: Tables S and Sprime let S ← Table(0:n - 1, 0:n - 1) let Sprime ← Table(0:n - 1, 0:n - 1) let firstOccurence ← Array(0:Delta - 1) for all i in {0, ..., Delta - 1} do firstOccurence[i] ← -1 end for for i ← 0:s - 1 do let j ← i × t let c ← 0 let fc ← 0 let noBlock ← i let block_start ← j let block_end ← min{(i + 1) × t - 1, n - 1} while j < n do if firstOccurence[B[j]] = -1 then firstOccurence[B[j]] ← j end if if atLeastQInstances(firstOccurence[B[j]], block_end, fc + 1) then c ← B[j] fc ← fc + 1 end if if j = block_end then S[i * s + noBlock] ← c Sprime[i × s + noBlock] ← fc noBlock ← noBlock + 1 block_end ← min{block_end + t, n - 1} end if end while for all j in {0, ..., Delta - 1} do firstOccurence[j] ← -1 end for end for
Запрос
[ редактировать ]Мы определим алгоритм запроса по массиву . Это можно перевести в ответ , поскольку для любого , это режим для тогда и только тогда, когда это режим для . Мы можем преобразовать ответ для к ответу на в постоянное время, заглянув или по соответствующему индексу.
Учитывая запрос , запрос разбивается на три части: префикс, диапазон и суффикс. Позволять и . Они обозначают индексы первого и последнего блока, которые полностью содержатся в . Диапазон этих блоков называется промежутком. Тогда префикс (набор индексов перед диапазоном), а суффикс — (набор индексов после промежутка). Префикс, суффикс или диапазон могут быть пустыми, последнее — если .
Для пролета режим уже хранится в . Позволять быть частотой моды, которая хранится в . Если диапазон пуст, пусть . Напомним, что по теореме 1 мода является либо элементом префикса, диапазона или суффикса. Линейное сканирование выполняется для каждого элемента в префиксе и суффиксе, чтобы проверить, превышает ли его частота текущий кандидат. , в этом случае и обновляются до нового значения. В конце сканирования содержит режим и его частота.
Процедура сканирования
[ редактировать ]Процедура аналогична как для префикса, так и для суффикса, поэтому достаточно запустить эту процедуру для обоих:
Позволять быть индексом текущего элемента. Есть три случая:
- Если , тогда оно присутствовало в и его частота уже подсчитана. Переход к следующему элементу.
- В противном случае проверьте, если частота в по крайней мере (это можно сделать за постоянное время, поскольку это эквивалентно проверке на наличие ).
- Если это не так, то переходим к следующему элементу.
- Если да, то вычислите фактическую частоту из в линейным сканированием (начиная с индекса ) или бинарный поиск в . Набор и .
Это линейное сканирование (исключая вычисления частоты) ограничено размером блока. , поскольку ни префикс, ни суффикс не могут быть больше, чем . Дальнейший анализ линейных сканирований, выполненных для вычислений частоты, показывает, что они также ограничены размером блока. [ 1 ] Таким образом, время запроса .
Структура данных субквадратичного пространства с постоянным временем запроса
[ редактировать ]Этот метод по [ 2 ] использует пространство для запроса постоянного времени. Мы можем заметить, что если требуется постоянное время запроса, это лучшее решение, чем решение, предложенное Чаном и др.: [ 1 ] поскольку последний дает пространство для постоянного времени запроса, если .
Предварительная обработка
[ редактировать ]Позволять быть массивом. Предварительная обработка выполняется в три этапа:
- Разделить массив в блоки , где размер каждого блока равен . Построить стол размера где это режим . Общее пространство для этого шага составляет
- На любой запрос , позволять быть блоком, который содержит и быть блоком, который содержит . Пусть промежутком будет множество блоков, полностью содержащихся в . Режим блока можно получить из . По теореме 1 модой может быть либо элемент префикса (индексы перед началом промежутка), элемент суффикса (индексы после окончания интервала), или . Размер префикса плюс размер суффикса ограничен , таким образом, положение режима сохраняется как целое число в диапазоне от к , где указывает позицию в префиксе/суффиксе и указывает, что режим является режимом диапазона. Есть возможные запросы с участием блоков и , поэтому эти значения сохраняются в таблице размера . Кроме того, существуют такие таблицы, поэтому общее пространство, необходимое для этого шага, равно . Для доступа к этим таблицам в дополнение к режиму в таблице добавляется указатель. для каждой пары блоков.
- Для обработки запросов где и находятся в одном блоке, все такие решения вычисляются заранее. Есть из них они хранятся в трехмерной таблице такого размера.
Общий объем пространства, используемого этой структурой данных, равен , что сводится к если мы возьмем .
Запрос
[ редактировать ]Учитывая запрос , проверьте, полностью ли он содержится внутри блока, и в этом случае ответ сохраняется в таблице . Если запрос охватывает ровно один или несколько блоков, то ответ находится в таблице . В противном случае используйте указатель, хранящийся в таблице на позиции , где — индексы блоков, содержащих соответственно и , чтобы найти таблицу который содержит позиции режима для этих блоков и использует эту позицию для поиска режима в . Это можно сделать за постоянное время.
Ссылки
[ редактировать ]- ^ Перейти обратно: а б с д и ж Чан, Тимоти М.; Дюроше, Стефан; Ларсен, Каспер Грин; Моррисон, Джейсон; Уилкинсон, Брайан Т. (2013). «Структуры данных линейного пространства для запросов в массивах в режиме диапазона» (PDF) . Теория вычислительных систем . Спрингер: 1–23.
- ^ Перейти обратно: а б с Кризанц, Дэнни; Морен, Пэт ; Смид, Мишель Х.М. (2003). «Режим диапазона и запросы медианы диапазона в списках и деревьях» (PDF) . ИСААК : 517–526. arXiv : cs/0307034 . Бибкод : 2003cs........7034K .
- ^ Греве, М; Йоргенсен, А.; Ларсен, К.; Труэлсен, Дж. (2010). «Нижние границы зонда ячейки и приближения для режима диапазона». Автоматы, языки и программирование : 605–616.