Tôi đã xem xét cho bài kiểm tra cấu trúc dữ liệu cuối cùng của mình và tôi đã xem xét một câu hỏi trong trận chung kết năm ngoái. Đã làm việc trên nó trong ba giờ qua, tôi vẫn không thể tìm ra cách để giải quyết nó, ngoại trừ bằng thử và sai. Dưới đây là những câu hỏi:Tìm va chạm trong bảng băm
"Giả sử rằng kích thước của bảng băm của bạn là 31, g liên tục cũng là 31, và rằng bạn sử dụng mã băm sau
int hash = 0;
int n = s.length();
for (int i = 0; i < n; i++)
hash = g * hash + s.charAt(i);
và rằng bạn sử dụng chain riêng biệt để giải quyết liệt kê năm tên khác nhau sẽ băm vào cùng một vị trí trong bảng. "
Tôi nghĩ rằng phải có một số thủ thuật, có thể liên quan đến toán tử modulo, để giải quyết vấn đề này, xem xét kích thước của bảng băm là 31, tương tự như hằng số g. Xin lỗi nếu tôi có vẻ như nó, nhưng tôi không yêu cầu mã hay bất cứ điều gì, chỉ cần một số suy nghĩ/gợi ý về câu hỏi. Bất kỳ bình luận được đánh giá cao. Cảm ơn
Thú vị! Cảm ơn rất nhiều vì đã chỉ ra điều đó. –
Vui mừng được giúp đỡ ... –
Btw, điều này thực hiện của băm lá Java mở cho một cuộc tấn công DoS! Xem http://www.ocert.org/advisories/ocert-2011-003.html, http://cryptanalysis.eu/blog/2011/12/28/effective-dos-attacks-against-web-application-plattforms -hashdos/hoặc google cho các cuộc tấn công DoS bằng cách sử dụng bản đồ băm. – yshavit