Мне не удалось найти удовлетворительного освещения этой темы в одном месте, поэтому мне было интересно:
Каковы наиболее быстрые алгоритмы пересечения, объединения и разъединения?
Есть ли интересные с ограниченными доменами?
Может ли кто-нибудь победить O (Z), где Z - фактический размер пересечения?
Если ваш подход основан на отсортированных наборах, обратите внимание на это, но не считайте его дисквалифицирующим фактором. Мне кажется, что должно быть настоящее хранилище тонких оптимизаций, которыми можно поделиться, и я не хочу пропустить ни одну из них.
Некоторые известные мне алгоритмы основаны на побитовых операциях, выходящих за рамки простого, поэтому вы можете предполагать наличие SSE4 и доступ к внутренним компонентам, таким как popcount. Обратите внимание на это предположение.
Интересы:
Реализация пересечения B-Y
Обновление
У нас есть несколько действительно хороших частичных ответов, но я все еще надеюсь на несколько более полных атак на проблему. Мне особенно интересно увидеть более четко сформулированное использование фильтров Блума для решения проблемы.
Обновление
Я сделал некоторую предварительную работу по объединению фильтров Блума с хеш-таблицей с кукушкой. Это выглядит почти неприятно многообещающим, потому что у них очень похожие требования. Я пошел дальше и принял ответ, но на данный момент я не очень доволен.