У меня есть большая коллекция из нескольких миллионов наборов, C. Элементы моих наборов происходят из вселенной из примерно 2000 возможных элементов. Мне нужно знать, что для заданного множества s, которое установлено в C, имеет наибольшее пересечение с s? (Или k множеств в C с k-наибольшими пересечениями). Я буду выполнять многие из этих запросов, последовательно, для разных s.
Я знаю, что очевидный способ сделать это - просто перебрать все точки в C и вычислить пересечение и взять max. Существуют ли какие-либо интеллектуальные структуры данных/трюки программирования, которые могут ускорить мой поиск? Было бы здорово, если бы я мог сделать это быстрее, чем O (C).
ИЗМЕНИТЬ: приблизительные ответы тоже будут в порядке.