2013-01-08 36 views
27

Tôi có trường khóa chuỗi ký tự 10 ký tự trong cơ sở dữ liệu. Tôi đã sử dụng CRC32 để băm lĩnh vực này nhưng tôi lo lắng về bản sao. Ai đó có thể cho tôi thấy xác suất va chạm trong tình huống này không?Xác suất va chạm khi sử dụng băm 32 bit

p.s. trường chuỗi của tôi là duy nhất trong cơ sở dữ liệu. Nếu số lượng các trường chuỗi là 1 triệu, xác suất va chạm là gì?

Trả lời

23

Trong trường hợp bạn trích dẫn, ít nhất một vụ va chạm về cơ bản là được bảo đảm. Xác suất của ít nhất một va chạm là khoảng 1 - 3x10 -51. Số lượng trung bình của va chạm bạn mong chờ là khoảng 116.

Nhìn chung, số lượng trung bình các xung đột trong k mẫu, mỗi một sự lựa chọn ngẫu nhiên trong số n giá trị có thể là:

N(n,k)~=k(k-1)/(2n)

xác suất ít nhất một vụ va chạm là:

p(n,k)~=1-e^(-k(k-1)/(2n))

Trong trường hợp của bạn, n = 2 và k = 10 .

Xác suất của một vụ va chạm ba trong trường hợp của bạn là khoảng 0,01. Xem Birthday Problem.

+0

Cảm ơn bạn rất nhiều, tôi tự hỏi rằng xác suất này vẫn còn phụ thuộc vào thuật toán CRC32? – nguyenngoc101

+0

Bất kỳ thuật toán băm 32 bit nào tốt sẽ cho kết quả chính xác như nhau. –

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