เมื่อได้รับคำตอบของ Zero Piraeus สำหรับคำถามอื่นเรามีสิ่งนั้น
x = tuple(set([1, "a", "b", "c", "z", "f"]))
y = tuple(set(["a", "b", "c", "z", "f", 1]))
print(x == y)
พิมพ์True
ประมาณ 85% ของเวลาที่เปิดใช้งานการสุ่มแฮช ทำไมถึง 85%?
เมื่อได้รับคำตอบของ Zero Piraeus สำหรับคำถามอื่นเรามีสิ่งนั้น
x = tuple(set([1, "a", "b", "c", "z", "f"]))
y = tuple(set(["a", "b", "c", "z", "f", 1]))
print(x == y)
พิมพ์True
ประมาณ 85% ของเวลาที่เปิดใช้งานการสุ่มแฮช ทำไมถึง 85%?
คำตอบ:
ฉันจะถือว่าผู้อ่านคำถามนี้อ่านทั้งสองอย่าง:
คำอธิบายของฉันของพจนานุกรม CPython ของ
สิ่งแรกที่ควรทราบก็คือการสุ่มแฮชจะตัดสินใจในการเริ่มต้นล่าม
แฮชของแต่ละตัวอักษรจะเหมือนกันสำหรับทั้งสองชุดดังนั้นสิ่งเดียวที่สำคัญก็คือหากมีการชนกัน (ซึ่งคำสั่งจะได้รับผลกระทบ)
โดยการหักของลิงก์ที่สองนั้นเรารู้ว่าอาร์เรย์สำรองสำหรับชุดเหล่านี้เริ่มต้นที่ความยาว 8:
_ _ _ _ _ _ _ _
ในกรณีแรกเราแทรก1
:
_ 1 _ _ _ _ _ _
จากนั้นใส่ส่วนที่เหลือ:
α 1 ? ? ? ? ? ?
จากนั้นปรับขนาดเป็นขนาด 32:
1 can't collide with α as α is an even hash
↓ so 1 is inserted at slot 1 first
? 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
ในกรณีที่สองเราใส่ส่วนที่เหลือ:
? β ? ? ? ? ? ?
แล้วลองแทรก 1:
Try to insert 1 here, but will
↓ be rehashed if β exists
? β ? ? ? ? ? ?
จากนั้นจะถูกปรับปรุงใหม่:
Try to insert 1 here, but will
be rehashed if β exists and has
↓ not rehashed somewhere else
? β ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
ดังนั้นคำสั่งการวนซ้ำจะแตกต่างกันหรือไม่นั้นขึ้นอยู่กับว่ามีβอยู่หรือไม่
โอกาสของβคือโอกาสที่ตัวอักษร 5 ตัวใด ๆ จะแฮชเป็น 1 โมดูโล 8 และแฮชเป็น 1 โมดูโล 32
เนื่องจากอะไรก็ตามที่แฮชถึง 1 โมดูโล 32 ก็แฮชถึง 1 โมดูโล 8 เราจึงต้องการหาโอกาสที่ช่อง 32 ช่องหนึ่งในห้าอยู่ในช่องที่ 1:
5 (number of letters) / 32 (number of slots)
5/32 เป็น 0.15625 เพื่อให้มีความเป็นchance¹ 15.625% ของคำสั่งที่ถูกที่แตกต่างกันระหว่างสองชุดก่อสร้าง
ไม่แปลกเลยนี่คือสิ่งที่ Zero Piraeus วัดได้
¹ในทางเทคนิคแม้จะไม่ชัดเจน เราสามารถแสร้งทำเป็นแฮชทุกๆ 5 อันโดยไม่ซ้ำกันเนื่องจากการแฮชใหม่ แต่เนื่องจากการตรวจสอบเชิงเส้นจึงมีแนวโน้มที่โครงสร้าง "มัด" จะเกิดขึ้นมากกว่า ... ไม่ส่งผลกระทบต่อเราจริง