Giả sử tôi có một số lượng rất lớn các chuỗi (giả sử 10 tỷ chuỗi ~ 50 ký tự mỗi chuỗi). Tôi muốn phân phối các chuỗi thành chính xác 10 nhóm. Mỗi nhóm nên chứa khoảng 10% các chuỗi. Với hàm băm() Tôi có thể làm:Cải thiện việc phân phối các giá trị hàm băm
int bucket_for_s = h(s) % 10
Tuy nhiên điều này không đảm bảo về tính đồng đều của phân phối. Giả sử tôi làm điều trên cho tất cả các chuỗi và thấy rằng 30% chuyển đến nhóm 1, 5% chuyển đến nhóm 2 và cứ tiếp tục như vậy. Câu hỏi của tôi là:
Với phân phối h(), có cách nào để tạo hàm băm mới h2() sẽ phân phối các chuỗi đồng đều hơn không? Ngoài ra, có một quy trình có thể tạo ra một loạt hàm băm h2(), h3() ... sao cho 1: mỗi hàm băm tốt hơn so với hàm trước và 2: Tôi chỉ phải tạo ra một hàm băm. số hàm băm hợp lý?
Tôi cũng nên đề cập đến điều đó thật không may, tôi không thể chỉ đơn giản chia đầu vào thành 10 phần vì đầu vào của tôi được trải rộng trên một số máy. Tôi đang tìm một giải pháp xác định tôi có thể áp dụng cho từng máy riêng biệt và nhận được kết quả tương tự (vì vậy cuối cùng "hello" sẽ chuyển sang nhóm x, bất kể máy nào được lưu trữ).
Đây có phải là câu hỏi lý thuyết không? Hay bạn có dữ liệu thực nghiệm về điều này? Ngoài ra, bạn đang sử dụng một hệ thống thủ công hoặc một cái gì đó như Hadoop? – cyroxx
Đây là một câu hỏi lý thuyết vượt qua tâm trí của tôi trong khi suy nghĩ về việc thiết kế một hệ thống thủ công. Cho đến nay tôi đã không tìm thấy câu trả lời cho nó. – user1424934