Я хочу эффективно отфильтровать список целых чисел для дубликатов таким образом, чтобы хранить только полученный набор.
Один способ это можно увидеть:
- у нас есть диапазон целых чисел с N большим (скажем, 2 40 )
- у нас есть функция с, предположительно, многими столкновениями (изображения равномерно распределены в S )
- тогда нам нужно хранить , то есть { f ( x ) | x ∈ S }
У меня есть достаточно точная (вероятностная) оценка того, что есть, и поэтому может выделять структуры данных заранее (скажем, | f [ S ] | ≈ 2 30 ).
У меня было несколько идей, но я не уверен, что будет лучшим подходом:
- о наборе битов не может быть и речи, потому что входной набор не помещается в память.
- хеш-таблицу, но (1) она требует некоторой перегрузки памяти, скажем, 150% от и (2) таблица должна быть исследована при сборке, что требует дополнительного времени из-за нехватки памяти.
- сортировка «на лету», предпочтительно со сложностью (сортировка без сравнения). В связи с этим я не уверен, в чем заключается основное различие между сортировкой сегментов и флэш- сортировкой .
- простой массив с бинарным деревом поиска, но для этого требуется время .
- возможно, использование фильтров Блума или подобной структуры данных может быть полезно для ослабления (с ложными срабатываниями) проблемы.
Некоторые вопросы по stackoverflow, кажется, решают такие вещи ( /programming/12240997/sorting-array-in-on-run-time , /programming/3951547/java -array-find-duplicates ), но ни один из них не соответствует моим требованиям.