Tôi có một vấn đề khá độc đáo để giải quyết và tôi hy vọng ai đó ở đây có thể cung cấp cho tôi cái nhìn sâu sắc về cách giải quyết vấn đề tốt nhất.
Vấn đề: Giả sử một danh sách các số N được chia sẻ giữa một nhóm người tham gia theo cách mà không một người tham gia nào thực sự biết bất kỳ số nào họ chia sẻ. Tất cả những người tham gia đều biết N (kích thước của danh sách các số) và tổng của tất cả các số trong danh sách, nhưng không có gì khác là một tiên nghiệm.
Bằng cách làm việc cùng nhau, có thể so sánh hai số chia sẻ a và b theo cách mà những người tham gia tìm hiểu xem tuyên bố "a <b" có đúng không, nhưng không có gì hơn. Tuy nhiên, đây là một việc cực kỳ tốn kém (đọc: có thể mất nhiều giây, thậm chí là vài phút, để hoàn thành một so sánh duy nhất). Xem phần cuối của bài đăng này để biết thêm một chút thông tin về cách điều đó là có thể.
Vào cuối ngày, các bên muốn đưa ra các chỉ số trong danh sách tương ứng với "phần trăm K hàng đầu" (tỷ lệ K% lớn nhất) trong danh sách. Tất nhiên điều này có thể được thực hiện bằng cách sắp xếp hoặc sử dụng thuật toán lựa chọn "top K". Tuy nhiên, những xu hướng này sử dụng rất nhiều so sánh khủng khiếp, đó là điều cần tránh. (Đây là O (n log n) hoặc O (n), với các hằng số ẩn khá lớn.)
Một cách khác là "đoán" số X trong đó (1-K)% nhỏ hơn X và K% lớn hơn. Sau đó, bạn có thể so sánh từng phần tử với X và xem có bao nhiêu lớn hơn và bao nhiêu nhỏ hơn. Nếu dự đoán của bạn sai, hãy sửa lại bằng cách sử dụng tìm kiếm nhị phân cho đến khi bạn hội tụ một giải pháp chính xác. Điều này mất ít so sánh hơn nếu dự đoán của bạn là tốt.
Vì vậy, câu hỏi của tôi là,
Chỉ cho N và tổng, cách tốt nhất để "dự đoán" X là gì?
Tất nhiên điều này sẽ phụ thuộc vào phân phối cơ bản. Đối với các trường hợp sử dụng khác nhau, phân phối cơ bản có thể sẽ khác nhau nhưng sẽ được biết đến, vì vậy tôi quan tâm đến các giải pháp tốt cho tất cả các giải pháp phổ biến (bình thường, thống nhất, theo cấp số nhân, có thể là một số khác). Tôi cũng rất thích nghe các đề xuất về cách tốt nhất để thực hiện tìm kiếm "giống như nhị phân" để giảm thiểu số lượng các bước đưa ra một giả định về phân phối cơ bản.
PHỤ LỤC: Mỗi giá trị trong danh sách được chia sẻ giữa những người tham gia bằng cách sử dụng chương trình chia sẻ bí mật của Shamir. Giả sử có M người tham gia và danh sách có độ dài N. Sau đó, số thứ i trong danh sách được biểu thị bằng đa thức độ M-1 trên một số trường hữu hạn F. Số hạng không đổi của f i là số được chia sẻ, tất cả các hệ số khác được lựa chọn thống nhất một cách ngẫu nhiên từ F. cổ phiếu j thứ của người tham gia sau đó được f i ( j ) , 1 ≤ i ≤ N. Với chia sẻ này, người tham gia không có thông tin (theo nghĩa lý thuyết thông tin) về con số; trong thực tế, không có tập hợp con nào của người tham gia có thể kết hợp kiến thức để tìm hiểu bất kỳ thông tin nào về các số được chia sẻ. Tuy nhiên, bằng cách sử dụng một kỹ thuật tính toán đa bên an toàn tinh vi, có thể xác định xem một giá trị được chia sẻ có nhỏ hơn giá trị khác mà không tiết lộ thêm thông tin nào không. Kỹ thuật này liên quan đến tất cả những người tham gia hợp tác, đó là lý do tại sao nó rất tốn kém để làm và nên được thực hiện với số lần ít nhất có thể.