Chcę wydajnie filtrować listę liczb całkowitych dla duplikatów w taki sposób, że tylko wynikowy zestaw musi być przechowywany.
Można to zobaczyć na jeden sposób:
- mamy szereg liczb całkowitych z duży (powiedzmy )
- mamy funkcję z podobno wieloma kolizjami (obrazy są równomiernie rozmieszczone w )
- następnie musimy przechowywać , to jest
Mam dość dokładne (probabilistyczne) oszacowanie tego, co jest i dlatego może wcześniej przydzielić struktury danych (powiedzmy ).
Miałem kilka pomysłów, ale nie jestem pewien, jakie byłoby najlepsze podejście:
- zestaw bitów nie wchodzi w rachubę, ponieważ zestaw danych wejściowych nie mieści się w pamięci.
- tablica skrótów, ale (1) wymaga trochę pamięci, powiedzmy 150% z oraz (2) tabela musi zostać zbadana po zbudowaniu, co wymaga dodatkowego czasu z powodu narzutu pamięci.
- „w locie”, najlepiej z złożoność (sortowanie nieporównywalne). W związku z tym nie jestem pewien, jaka jest główna różnica między sortowaniem kubełkowym a sortowaniem flash .
- prosta tablica z binarnym drzewem wyszukiwania, ale to wymaga czas.
- być może użycie filtrów Blooma lub podobnej struktury danych może być przydatne w rozluźnieniu (z fałszywymi pozytywami) problemu.
Wydaje się, że niektóre pytania dotyczące stackoverflow dotyczą tego rodzaju rzeczy ( /programming/12240997/sorting-array-in-on-run-time , /programming/3951547/java -array-find-duplicates ), ale żaden nie wydaje się odpowiadać moim wymaganiom.