Jump to content

Запрос режима диапазона

В структурах данных проблема запроса режима диапазона требует построить структуру данных на основе некоторых входных данных, чтобы эффективно отвечать на запросы, запрашивающие режим любого последовательного подмножества входных данных.

Постановка задачи

[ редактировать ]

Учитывая массив , мы хотим ответить на запросы вида , где . Режим любого массива это элемент такая, что частота больше или равна частоте . Например, если , затем потому что оно встречается три раза, тогда как все остальные значения встречаются меньше раз. В этой задаче запросы запрашивают режим подмассивов вида .

Теорема 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. Если это не так, то переходим к следующему элементу.
    2. Если да, то вычислите фактическую частоту из в линейным сканированием (начиная с индекса ) или бинарный поиск в . Набор и .

Это линейное сканирование (исключая вычисления частоты) ограничено размером блока. , поскольку ни префикс, ни суффикс не могут быть больше, чем . Дальнейший анализ линейных сканирований, выполненных для вычислений частоты, показывает, что они также ограничены размером блока. [ 1 ] Таким образом, время запроса .

Структура данных субквадратичного пространства с постоянным временем запроса

[ редактировать ]

Этот метод по [ 2 ] использует пространство для запроса постоянного времени. Мы можем заметить, что если требуется постоянное время запроса, это лучшее решение, чем решение, предложенное Чаном и др.: [ 1 ] поскольку последний дает пространство для постоянного времени запроса, если .

Предварительная обработка

[ редактировать ]

Позволять быть массивом. Предварительная обработка выполняется в три этапа:

  1. Разделить массив в блоки , где размер каждого блока равен . Построить стол размера где это режим . Общее пространство для этого шага составляет
  2. На любой запрос , позволять быть блоком, который содержит и быть блоком, который содержит . Пусть промежутком будет множество блоков, полностью содержащихся в . Режим блока можно получить из . По теореме 1 модой может быть либо элемент префикса (индексы перед началом промежутка), элемент суффикса (индексы после окончания интервала), или . Размер префикса плюс размер суффикса ограничен , таким образом, положение режима сохраняется как целое число в диапазоне от к , где указывает позицию в префиксе/суффиксе и указывает, что режим является режимом диапазона. Есть возможные запросы с участием блоков и , поэтому эти значения сохраняются в таблице размера . Кроме того, существуют такие таблицы, поэтому общее пространство, необходимое для этого шага, равно . Для доступа к этим таблицам в дополнение к режиму в таблице добавляется указатель. для каждой пары блоков.
  3. Для обработки запросов где и находятся в одном блоке, все такие решения вычисляются заранее. Есть из них они хранятся в трехмерной таблице такого размера.

Общий объем пространства, используемого этой структурой данных, равен , что сводится к если мы возьмем .

Учитывая запрос , проверьте, полностью ли он содержится внутри блока, и в этом случае ответ сохраняется в таблице . Если запрос охватывает ровно один или несколько блоков, то ответ находится в таблице . В противном случае используйте указатель, хранящийся в таблице на позиции , где — индексы блоков, содержащих соответственно и , чтобы найти таблицу который содержит позиции режима для этих блоков и использует эту позицию для поиска режима в . Это можно сделать за постоянное время.

  1. ^ Перейти обратно: а б с д и ж Чан, Тимоти М.; Дюроше, Стефан; Ларсен, Каспер Грин; Моррисон, Джейсон; Уилкинсон, Брайан Т. (2013). «Структуры данных линейного пространства для запросов в массивах в режиме диапазона» (PDF) . Теория вычислительных систем . Спрингер: 1–23.
  2. ^ Перейти обратно: а б с Кризанц, Дэнни; Морен, Пэт ; Смид, Мишель Х.М. (2003). «Режим диапазона и запросы медианы диапазона в списках и деревьях» (PDF) . ИСААК : 517–526. arXiv : cs/0307034 . Бибкод : 2003cs........7034K .
  3. ^ Греве, М; Йоргенсен, А.; Ларсен, К.; Труэлсен, Дж. (2010). «Нижние границы зонда ячейки и приближения для режима диапазона». Автоматы, языки и программирование : 605–616.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: cda2d0618969f0291e4fa79a0162ebe8__1622675700
URL1:https://arc.ask3.ru/arc/aa/cd/e8/cda2d0618969f0291e4fa79a0162ebe8.html
Заголовок, (Title) документа по адресу, URL1:
Range mode query - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)