2014-10-01 15 views

Trả lời

128

tôi sẽ giả định bất kỳ độc giả của câu hỏi này là đã đọc cả:

Điều đầu tiên cần lưu ý là việc ngẫu nhiên băm được quyết định khi khởi động phiên dịch.

Hàm băm của mỗi chữ cái sẽ giống nhau cho cả hai bộ, do đó, điều duy nhất có thể quan trọng là nếu có va chạm (thứ tự sẽ bị ảnh hưởng).


Đến trích về điều đó liên kết thứ hai chúng ta đều biết các mảng hậu thuẫn cho những bộ bắt đầu từ chiều dài 8:

_ _ _ _ _ _ _ _ 

Trong trường hợp đầu tiên, chúng tôi chèn 1:

_ 1 _ _ _ _ _ _ 

và sau đó chèn phần còn lại:

α 1 ? ? ? ? ? ? 

Sau đó, nó được rehashed kích thước 32:

1 can't collide with α as α is an even hash 
    ↓ so 1 is inserted at slot 1 first 
? 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 

Trong trường hợp thứ hai, chúng ta chèn phần còn lại:

? β ? ? ? ? ? ? 

Và sau đó cố gắng chèn 1:

Try to insert 1 here, but will 
    ↓ be rehashed if β exists 
? β ? ? ? ? ? ? 

Và sau đó nó sẽ được phục hồi:

Try to insert 1 here, but will 
    be rehashed if β exists and has 
    ↓ not rehashed somewhere else 
? β ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 

Vì vậy, liệu các đơn đặt hàng lặp lại có khác nhau hay không chỉ phụ thuộc vào việc có tồn tại hay không.


Cơ hội của một β là cơ hội mà bất kỳ 5 chữ sẽ băm tới 1 modulo 8 băm tới 1 modulo 32.

Kể từ khi bất cứ điều gì mà băm tới 1 modulo 32 cũng băm tới 1 modulo 8, chúng tôi muốn tìm các cơ hội mà trong số 32 khe cắm, một trong năm là ở khe 1:

5 (number of letters)/32 (number of slots) 

5/32 là 0,15625, vì vậy có một 15.625% cơ hội¹ của các đơn đặt hàng khác nhau giữa hai công trình thiết lập.


Không lạ gì hết, đây chính xác là những gì Zero Piraeus đo.


¹Kỹ thuật này thậm chí không rõ ràng. Chúng ta có thể giả vờ mỗi một trong 5 băm duy nhất vì phục hồi, nhưng vì thăm dò tuyến tính nó thực sự có nhiều khả năng cho các cấu trúc "bó" xảy ra ... nhưng bởi vì chúng ta chỉ xem liệu một khe có bị chiếm hay không, điều này không 't thực sự ảnh hưởng đến chúng tôi.

Các vấn đề liên quan