Установить оракул пересечения
![]() | Эта статья может быть слишком технической для понимания большинства читателей . ( февраль 2015 г. ) |
Оракул пересечения множеств (SIO) — это структура данных , которая представляет собой набор множеств и может быстро отвечать на запросы о том, ли пересечение множеств не пусто двух заданных множеств.
Входными данными для задачи являются n конечных множеств. Сумма размеров всех множеств равна N (что также означает, что существует не более N различных элементов). SIO должен быстро ответить на любой запрос вида:
- «Пересекается ли множество S i с множеством S k »?
Минимум памяти, максимальное время запроса
[ редактировать ]Без какой-либо предварительной обработки на запрос можно ответить, вставив элементы S i во временную хеш-таблицу и затем проверив для каждого элемента S k , находится ли он в хеш-таблице. Время запроса составляет .
Максимум памяти, минимальное время запроса
[ редактировать ]В качестве альтернативы мы можем предварительно обработать наборы и создать n на таблицу размером n , в которую уже введена информация о пересечении. Тогда время запроса , но требуемая память .
Компромисс
[ редактировать ]Определите «большое множество» как множество, содержащее не менее элементы. Очевидно, что существует не более такие наборы. Создайте таблицу данных пересечения каждого большого набора с каждым другим большим набором. Это требует память. Дополнительно для каждого большого набора храните хеш-таблицу всех его элементов. Это требует дополнительных память.
Учитывая два набора, есть три возможных случая:
- Оба набора большие. Затем просто прочитайте ответ на запрос пересечения из таблицы, по времени .
- Оба набора небольшие. Затем вставьте элементы одного из них в хеш-таблицу и проверьте элементы другого; поскольку наборы небольшие, необходимое время .
- Один комплект большой, другой маленький. Переберите все элементы маленького набора и проверьте их по хеш-таблице большого набора. Требуемое время снова .
В общем, если мы определим «большое множество» как множество, по крайней мере элементов, то число большого множества не более поэтому требуемая память , а время запроса .
Приведение к приблизительному расстоянию оракула
[ редактировать ]Задачу SIO можно свести к задаче оракула приблизительного расстояния (DO) следующим образом. [1]
- Постройте неориентированный двудольный граф , где одна часть содержит узел для каждого из n наборов, а другая часть содержит узел для каждого из (максимум) N элементов, содержащихся в наборах.
- Между набором и элементом существует грань, если набор содержит элемент.
Этот график имеет следующие свойства:
- Если два множества пересекаются, расстояние между ними равно 2 (от одного множества до элемента пересечения, до другого множества).
- Если два множества не пересекаются, расстояние между ними не менее 4.
Итак, с ДО, коэффициент аппроксимации которого меньше 2, мы можем решить проблему SIO.
Считается, что проблема SIO не имеет нетривиального решения. Тоесть, это требует пространство, чтобы вовремя отвечать на вопросы . Если эта гипотеза верна, это означает, что не существует ДО с коэффициентом аппроксимации менее 2 и постоянным временем запроса. [1]
Ссылки
[ редактировать ]- ^ Jump up to: а б Патраску, М. ; Родитти, Л. (2010). Оракулы расстояния за границей Торупа-Цвика . 2010 51-й ежегодный симпозиум IEEE по основам информатики (FOCS). п. 815. дои : 10.1109/FOCS.2010.83 . ISBN 978-1-4244-8525-3 .