Я хочу ефективно фільтрувати список цілих чисел для дублікатів таким чином, що потрібно зберігати лише отриманий набір.
Один із способів цього можна побачити:
- ми маємо діапазон цілих чисел з великий (скажімо )
- у нас є функція нібито з багатьма зіткненнями (зображення рівномірно розподілені в )
- тоді нам потрібно зберігати , це є
Я маю досить точну (імовірнісну) оцінку того, що є, і тому може виділяти структури даних заздалегідь (скажімо ).
У мене було кілька ідей, але я не впевнений, що було б найкращим підходом:
- про біт не виникає сумніву, оскільки вхідний набір не вписується в пам'ять.
- хеш-таблиця, але (1) їй потрібна деяка об'єм пам'яті, скажімо, 150% та (2) таблицю слід досліджувати, коли її будують, що вимагає додаткового часу через об'єм пам'яті.
- сорт "на льоту", бажано з складність (сортування порівняння). З цього приводу я не впевнений, яка головна різниця між сортуванням відра і спалахом .
- простий масив з двійковим деревом пошуку, але для цього потрібно час.
- можливо, використання фільтрів Bloom або подібної структури даних може бути корисним для розслаблення (з помилковими позитивами) проблеми.
Деякі питання щодо stackoverflow, схоже, вирішують подібні речі ( /programming/12240997/sorting-array-in-on-run-time , /programming/3951547/java -array-find-дублікати ), але, схоже, жоден не відповідає моїм вимогам.