我有一个非常独特的问题要解决,我希望这里的人可以让我对如何最好地解决它有所了解。
问题:假设在一组参与者之间共享N个号码的列表,使得没有一个参与者实际知道他们共享的任何号码。所有参与者都知道N(数字列表的大小)和列表上所有数字的总和,但仅是先验的。
通过一起工作,可以比较两个共享数字a和b,使参与者了解语句“ a <b”是否为真,但仅此而已。但是,这是一件极其昂贵的事情(阅读:完成单个比较可能要花费几秒钟,甚至是几分钟)。有关如何进行此操作的更多信息,请参见本文末尾。
最终,各方希望输出列表中哪些索引对应于列表中的“前K%”(最大的K%)共享数。当然,这可以通过排序或使用“前K个”选择算法来完成。但是,这些往往会使用大量比较,这是可以避免的。(这些是O(n log n)或O(n),具有相当大的隐藏常数。)
另一种选择是“猜测”数字X,其中(1-K)%小于X并且K%大于。然后,您可以将每个元素与X进行比较,看看有多少个元素较大,有多少个元素较小。如果您的猜测是错误的,请使用二进制搜索之类的方法进行修改,直到收敛到正确的解决方案为止。如果您的猜测是正确的,那么需要进行的比较少得多。
所以,我的问题是
仅给出N和总和,“预测” X的最佳方法是什么?
当然,这将取决于基础分布。对于不同的用例,基本的分布可能会有所不同,但将是已知的,因此,我对所有常见解决方案(正态,统一,指数,也许还有其他)的良好解决方案感兴趣。我也很想听听有关如何最好地进行“二元”搜索以最大程度减少步骤的建议(假设对基础分布有假设)。
附录:使用Shamir的秘密共享方案在参与者之间共享列表中的每个值。假设有M个参与者,并且列表的长度为N。那么,列表上的第i个数字由某个有限域F上阶次为M-1 的多项式表示的常数项是共享,则从F随机选择所有其他系数。然后,第j个参与者的份额为,˚F 我(Ĵ )1 ≤ 我≤ Ñ。鉴于此份额,参与者没有有关该号码的信息(从信息论的角度而言);实际上,没有适当的参与者子集可以结合知识来学习有关共享号码的任何信息。但是,使用复杂的安全多方计算技术,可以在不透露任何更多信息的情况下确定一个共享值是否小于另一个共享值。这种技术需要所有参与者的配合,这就是为什么这样做的成本如此之高,并且应该尽可能少地进行几次的原因。