3
เป็นไปได้หรือไม่ที่จะใช้ตารางแฮชแบบกระจายโดยไม่ต้องใช้ตัวดำเนินการ%
ฉันต้องการใช้ตารางแฮชที่กระจายอย่างรวดเร็วใน C # ฉันมีปัญหาในการเลือกฟังก์ชั่นแฮช จำกัด ของฉันที่ใช้รหัสแฮชตามอำเภอใจและ "จำกัด " มันเพื่อให้สามารถใช้สร้างดัชนีถังได้ มีสองตัวเลือกที่ฉันเห็น: ในมือข้างหนึ่งคุณสามารถตรวจสอบให้แน่ใจว่าถังของคุณมีองค์ประกอบจำนวนมากเสมอและเพื่อ จำกัด การแฮชคุณเพียงแค่ปรับค่าตามจำนวนถัง นี่คือความจริงแล้วพจนานุกรมของ. NET ทำอะไร ปัญหาของวิธีนี้คือการใช้% ช้ามากเมื่อเทียบกับการปฏิบัติการอื่น ถ้าคุณมองไปที่ตารางการเรียนการสอน Agner ตัดหมอก , idiv(ซึ่งเป็นรหัสการชุมนุมที่ได้รับการสร้างขึ้นสำหรับ%) มีการเรียนการสอนแฝง ~ 25 รอบสำหรับโปรเซสเซอร์ Intel ใหม่ เปรียบเทียบนี้เพื่อรอบ 3 mulหรือ 1 สำหรับ Ops บิตเช่นand, หรือorxor ในทางกลับกันคุณสามารถมีจำนวนของถังเสมอได้ 2 คุณยังจะต้องคำนวณโมดูลัสของแฮชดังนั้นคุณจึงไม่ได้พยายามทำดัชนีนอกอาร์เรย์ แต่คราวนี้มันจะมีราคาไม่แพง . เนื่องจากกำลังของ 2 % Nเป็นเพียง& (N - 1)ข้อ จำกัด …