Самый быстрый набор операций на Западе

Я не смог найти удовлетворительного освещения этой темы в одном месте, поэтому мне было интересно: Каковы самые быстрые алгоритмы пересечения, объединения и разъединения множеств?
Есть ли какие-нибудь интересные с ограниченными доменами?
Может ли кто-нибудь превзойти O (Z), где Z - фактический размер пересечения?

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

Некоторые алгоритмы, которые я знаю, полагаются на побитовые операции за пределами ванили, поэтому вы можете предположить наличие SSE4 и доступ к встроенным функциям вроде popcount. Обратите внимание на это предположение.

Интересно: Реализация обновления BY Intersect


У нас есть действительно хорошие частичные ответы, но я все еще надеюсь на более полные атаки на эту проблему. Мне особенно интересно увидеть более полное использование фильтров Блума для решения проблемы.

Обновление
Я проделал некоторую предварительную работу по объединению фильтров Блума с хеш-таблицей с кукушкой. Это выглядит очень многообещающе, потому что у них очень похожие требования. Я пошел дальше и принял ответ, но на данный момент я не совсем удовлетворен.

16
задан Jake Kurzer 30 November 2010 в 00:32
поделиться