Saya ingin memfilter secara efisien daftar bilangan bulat untuk duplikat dengan cara yang hanya disimpan oleh set hasil.
Salah satu cara ini dapat dilihat:
- kami memiliki serangkaian bilangan bulat dengan besar (katakanlah )N 2 40
- kami memiliki fungsi dengan, konon, banyak tabrakan (gambar didistribusikan secara seragam dalam )S
- kita perlu menyimpan , yaitu{ f ( x ) | x ∈ S }
Saya memiliki estimasi (probabilistik) yang cukup akurat tentang apaadalah, dan karena itu dapat mengalokasikan struktur data di muka (katakan ).| f [ S ] | ≈ 2 30
Saya punya beberapa ide, tetapi saya tidak yakin apa yang akan menjadi pendekatan terbaik:
- bitet keluar dari pertanyaan karena set input tidak sesuai dengan memori.
- tabel hash, tetapi (1) membutuhkan beberapa overhead memori, katakanlah 150% daridan (2) tabel harus dieksplorasi ketika dibangun yang membutuhkan waktu tambahan karena overhead memori.
- semacam "on the fly", lebih disukai dengan kompleksitas (jenis non-perbandingan). Mengenai itu, saya tidak yakin apa perbedaan utama antara jenis ember dan flashsort .
- array sederhana dengan pohon pencarian biner, tetapi ini membutuhkan waktu .
- mungkin menggunakan filter Bloom atau struktur data serupa dapat berguna dalam relaksasi (dengan positif palsu) dari masalahnya.
Beberapa pertanyaan tentang stackoverflow tampaknya mengatasi hal-hal semacam ini ( /programming/12240997/sorting-array-in-on-run-time , /programming/3951547/java -array-Finding-duplikat ), tetapi tampaknya tidak ada yang cocok dengan persyaratan saya.