Эта статья может быть слишком технической для понимания большинства читателей . ( Февраль 2015 ) |
Оракул пересечения множеств (SIO) — это структура данных , которая представляет собой коллекцию множеств и может быстро отвечать на запросы о том, является ли пересечение множеств двух заданных множеств непустым.
Входные данные для задачи — n конечных множеств. Сумма размеров всех множеств равна N (что также означает, что существует не более N различных элементов). SIO должен быстро отвечать на любой запрос вида:
Без какой-либо предварительной обработки ответ на запрос может быть получен путем вставки элементов S i во временную хэш-таблицу , а затем проверки для каждого элемента S k наличия его в хэш-таблице. Время запроса составляет .
В качестве альтернативы мы можем предварительно обработать наборы и создать таблицу n -by -n , в которую уже введена информация о пересечении. Тогда время запроса составит , но требуемая память составит .
Определите «большой набор» как набор с не менее элементами. Очевидно, что таких наборов не более . Создайте таблицу данных пересечения между каждым большим набором с каждым другим большим набором. Для этого требуется память. Кроме того, для каждого большого набора храните хэш-таблицу всех его элементов. Для этого требуется дополнительная память.
При наличии двух наборов возможны три случая:
В общем случае, если мы определяем «большой набор» как набор, содержащий не менее элементов, то число больших наборов не превышает , поэтому требуемая память составляет , а время запроса — .
Проблему SIO можно свести к проблеме приближенного оракула расстояния (DO) следующим образом. [1]
Этот граф имеет следующие свойства:
Таким образом, с помощью DO, коэффициент аппроксимации которого меньше 2, мы можем решить проблему SIO.
Считается, что проблема SIO не имеет нетривиального решения. То есть, она требует пространства для ответа на запросы за время . Если эта гипотеза верна, это означает, что не существует DO с коэффициентом аппроксимации менее 2 и постоянным временем запроса. [1]