나는 해결해야 할 상당히 독특한 문제가 있으며 여기 누군가가 그것을 해결하는 가장 좋은 방법에 대한 통찰력을 줄 수 있기를 바랍니다.
문제 : 단일 참가자가 실제로 공유하는 숫자를 알지 못하는 방식으로 N 개의 숫자 목록을 참가자 세트간에 공유한다고 가정합니다. 모든 참가자는 N (숫자 목록의 크기)과 목록에있는 모든 숫자의 합계를 알고 있지만 더 이상 우선 순위는 없습니다.
함께 작업함으로써 참가자들이 "a <b"문장이 참인지 아닌지를 알 수있는 방식으로 두 개의 공유 숫자 a와 b를 비교할 수 있습니다. 그러나 이것은 매우 비싼 일입니다 (읽기 : 단일 비교를 완료하는 데 몇 초, 아마도 몇 분이 걸릴 수 있음). 그러한 일이 어떻게 가능한지에 대한 자세한 내용은이 게시물의 끝 부분을 참조하십시오.
하루가 끝나면 당사자들은 목록의 어느 지수가 목록의 "최고 K %"(최대 K %) 공유 숫자에 해당하는지 출력하려고합니다. 이것은 정렬 또는 "top K"선택 알고리즘을 사용하여 수행 할 수 있습니다. 그러나 이것들은 끔찍한 비교를 많이 사용하는 경향이 있으므로 피해야합니다. (이것은 상당히 큰 숨겨진 상수를 가진 O (n log n) 또는 O (n)입니다.)
다른 대안은 (1-K) %가 X보다 작고 K %가 더 큰 숫자 X에서 "추측"하는 것이다. 그런 다음 각 요소를 X와 비교하여 더 큰 개수와 더 작은 개수를 확인할 수 있습니다. 추측이 틀렸다면 올바른 솔루션에 수렴 될 때까지 이진 검색과 같은 것을 사용하여 수정하십시오. 추측이 좋으면 비교가 훨씬 적습니다.
제 질문은
N과 합계 만 주어지면 X를 "예측"하는 가장 좋은 방법은 무엇입니까?
물론 이것은 기본 분포에 달려 있습니다. 다른 유스 케이스의 경우 기본 분포는 다를 수 있지만 알려질 것이므로 모든 일반적인 것 (정상, 균일, 지수, 아마도 다른 것)에 대한 좋은 솔루션에 관심이 있습니다. 또한 기본 분포에 대한 가정이 주어지면 단계 수를 최소화하기 위해 "이진 유사"검색을 수행하는 최선의 방법에 대한 제안을 듣고 싶습니다.
부록 : 목록의 각 값은 Shamir의 비밀 공유 체계를 사용하여 참가자간에 공유됩니다. 가정 M 참여자가 존재하고이 목록은 목록에있는 i 번째의 개수는 다항식으로 표현되고,이어서 길이 N.이다 F. 중 일정한 기간 어떤 유한 필드도 이상 M-1 있는 숫자 공유하면 다른 모든 계수는 F에서 무작위로 균일하게 선택됩니다. j 번째 참가자의 공유는 ,. 이러한 공유가 주어지면 참가자는 그 수에 대한 정보 (정보 이론적 의미)가 없습니다. 실제로, 참가자의 적절한 서브 세트는 지식을 결합하여 공유 번호에 대한 정보를 학습 할 수 없습니다. 그러나 정교한 안전한 다자간 계산 기술을 사용하면 더 많은 정보를 공개하지 않고 하나의 공유 값이 다른 공유 값보다 작은 지 여부를 확인할 수 있습니다. 이 기술은 모든 참가자의 협력을 필요로하기 때문에 비용이 많이 들고 가능한 한 적은 횟수로 수행해야합니다.