1
การลบรายการที่ซ้ำกันได้อย่างมีประสิทธิภาพและมีค่าใช้จ่ายหน่วยความจำเหลือน้อย
ฉันต้องการกรองรายการจำนวนเต็มอย่างมีประสิทธิภาพสำหรับรายการที่ซ้ำกันในแบบที่ต้องเก็บชุดผลลัพธ์เท่านั้น วิธีนี้สามารถเห็นได้: เรามีช่วงของจำนวนเต็ม S={1,…,N}S={1,…,N}S = \{1, \dots{}, N\} กับ NNN ใหญ่ (พูด 2402402^{40}) เรามีฟังก์ชั่น f:S→Sf:S→Sf : S \to S มีการชนหลายครั้ง (ภาพมีการกระจายอย่างสม่ำเสมอ SSS) เราต้องไปเก็บของ f[S]f[S]f[S], นั่นคือ {f(x)|x∈S}{f(x)|x∈S}\{f(x) | x \in S\} ฉันมีการประมาณความแม่นยำ (ความน่าจะเป็น) ของสิ่งที่ |f[S]||f[S]||f[S]| คือและสามารถจัดสรรโครงสร้างข้อมูลล่วงหน้าได้ (พูด |f[S]|≈230|f[S]|≈230|f[S]| \approx 2^{30}) ฉันมีความคิดเล็กน้อย แต่ฉันไม่แน่ใจว่าอะไรจะเป็นวิธีที่ดีที่สุด: บิตเซตไม่อยู่ในคำถามเนื่องจากชุดอินพุตไม่พอดีกับหน่วยความจำ ตารางแฮช แต่ (1) ต้องการหน่วยความจำโอเวอร์เฮดประมาณ 150% |f[S]||f[S]||f[S]| และ (2) …