划分n征服(通过最小呼叫秘密共享)

时间:2015-04-25 20:55:03

标签: java algorithm divide-and-conquer

  

班级中有 n 的学生人数。老师告诉一个秘密   每个学生。分享秘密的唯一方法是通过电话   呼叫。使用分而治之,设计一种算法来找到最小值   所需的电话数量,以便每个学生获得所有   秘密。

我的一位朋友问我这个问题。我花了一些时间做一个草图,即我将有一系列的学生,我将递归地打破它,直到我有一个学生,并加入他们后,我将计算这两个之间的呼叫。 / p>

在组合两对时,我会计算两个呼叫,依此类推。这是令我感到不安的一点,或者可能在这里我错过了一些东西。

X1 X2  (1 call)               
X3 X4 (1 call)

X1 -----> X3
X2 -----> X4 (2 more calls) 

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

n> = 4个人共享所有n条信息的最佳方案是2n-4,如paper所示。

这个问题的分而治之的方法说明如下:

  

四人   比方说,A,B,C和D采用对话AB和CD,然后是   AC和BD。对于每个额外的人P,安排一个对话   AP,在A,B,C和D交换他们的知识之前,   然后是另一个对话AP。