Java 分而治之(通过最小调用进行秘密共享)
一个班有多少学生。老师告诉我一个秘密 每个学生。分享秘密的唯一方法是通过电话 呼叫利用分治法,设计了一种求最小值的算法 要求的电话数量,以便每个学生获得所有 秘密 我的一个朋友问我这个问题。我花了一些时间来画一个草图,也就是说,我会有一个学生数组,我会递归地打破它,直到我有一个学生,当他们回来后,我会计算这两个学生之间的通话次数 在组合两对时,我会数两次呼叫,以此类推。这是一个困扰我的问题,或者可能是我遗漏了什么Java 分而治之(通过最小调用进行秘密共享),java,algorithm,divide-and-conquer,Java,Algorithm,Divide And Conquer,一个班有多少学生。老师告诉我一个秘密 每个学生。分享秘密的唯一方法是通过电话 呼叫利用分治法,设计了一种求最小值的算法 要求的电话数量,以便每个学生获得所有 秘密 我的一个朋友问我这个问题。我花了一些时间来画一个草图,也就是说,我会有一个学生数组,我会递归地打破它,直到我有一个学生,当他们回来后,我会计算这两个学生之间的通话次数 在组合两对时,我会数两次呼叫,以此类推。这是一个困扰我的问题,或者可能是我遗漏了什么 X1 X2 (1 call) X3 X4 (1 c
X1 X2 (1 call)
X3 X4 (1 call)
X1 -----> X3
X2 -----> X4 (2 more calls)
感谢您的帮助。n>=4人共享所有n条信息的最佳方案为2n-4,如图所示 此问题的分而治之方法如下所示: 四人 A、 B,C和D,比如说,进行对话AB和CD,然后进行对话 AC和BD。每增加一个人P,安排一次对话 AP,在A、B、C和D交换知识之前, 然后又是一次谈话
每个电话是从一个学生打给另一个学生的吗?然后需要n-1个呼叫,因为除了最初被告知秘密的学生外,每个学生都需要接收他/她自己的呼叫。n-1是最大值,如我在示例X1和X2中所示,1次呼叫后可以有2个秘密,现在如果X1呼叫X3,而X3已经呼叫X4,那么X1获得了所有4个scretsWhoops,我误读了——我以为只有一个秘密。在这种情况下,n-1绝对是一个下界,而不是上界!这个方案是如何推广到n个人的?添加n个人,让n个人和1个人交谈,然后为n-1个人解决问题,然后让n个人和1个人再次交谈。我不明白。所以说,第5、6、7和8个人,比如说,都应该给第1个人打电话,然后4个人的方案运行,然后第5、6、7和8个人应该再和第1个人通话?@Peterderivez我不知道为什么,但我感到困惑的是,偶数和奇数的人有什么影响吗…请引导我…就像增加1个人,我们还需要4个电话,而如果我们有另一对电话号码是less@SSH要增加一个人,我们只需要再打两个电话,一个在开头,一个在结尾。总数是偶数还是奇数无关紧要。