一道笔试题

来源:互联网 发布:什么是淘宝大促商品 编辑:程序博客网 时间:2024/06/07 20:24

战报交流:战场上不同的位置有N个战士(n>4),每个战士知道当前的一些战况,现在需要这n个战士通过通话交流,互相传达自己知道的战况信息,每次通话,可以让通话的双方知道对方的所有情报,设计算法,使用最少的通话次数,使得战场上的n个士兵知道所有的战况信息,不需要写程序代码,得出最少的通话次数。


先思考这么个问题:

有a个node的cluster1和b个node的cluster2.(a>=2,b>=2) 如何连接使得cluster1,cluster2的node拥有cluster1和cluster2的全部信息?

1) 对于cluster1,必须存在一个状态,即至少有1个node拥有cluster1的全部信息,因为我们的目的是拥有cluster1和cluster2的全部信息。 此时至少需要a-1次连接,即单链,此时有且仅有2个node拥有全部信息。额外的a-2个node都不需要知道cluster1全部信息,因为如果要知道就需要1次连接,但由于它还需要是知道cluster2的信息,因而还需要1次。后面我们发现这是多余的。

    A_1 ->A_2->A_3....->A_{a-1} -> A_a  //A_{a-1},和A_a拥有A_1,A_2,A_3,..A_a的全部信息。

2) 对于cluster2也一样,至少需要b-1次连接使得B{b-1}和Bb拥有B1,B2,...B{b-1},Bb的全部信息。额外的b-2个node都不需要知道cluster2全部信息

3) 当cluster1和cluster2连接时,我们希望所有node都拥有全部信息。只有且仅有A{a-1},Aa与B{b-1},Bb连接一次,才能使得有node具有cluster1和cluster2的全部信息。当有一个node具有全部信息时,它与其他任何node1次连接就能使该node得到全部信息,这也是为什么上面说多余。

A{a-1} 与B{b-1} , Aa与Bb (或A{a-1}与Bb, Aa 与B{b-1})共两次连接,使得这4个node拥有全部信息。

除了这4个node外,其他node相互连接都无法得到全部信息。

这4个node与,其他node 通过一次连接使得该node 具有全部信息。

///////////////////////////////////////////////////////////////////////

  1. 分成两组:1) 2个node,2) n-2个node ;
  2. 2个node需要连接1次,使得2个node拥有2个节点信息;
  3. n-2个node至少需要n-3次连接,使得最后连接的2个node拥有这n-2个node的信息;
  4. 第一组的2个node与第n-2组的最后两个node(即获得该组全部信息的2个nodes)分别连接;于是4个节点得到全部信息,连接了2次。这里是为什么节约了一次连接的关键。
  5. 剩下的n-4个node都没有获得全部信息,每个node至少需要一次连接。因此至少需要n-4次连接。用拥有全部信息的其中一个node与剩下的n-4个node连接。则只需要n-4次。
  6. 得总过需要1+(n-3)+2+(n-4)= 2n-4.

需要注意的是:每次连接有且仅有两个node

你或许会问 为什么分成两组。因为即使分成很多组,最终还是归结为两组的形式。

// 对于这点,有人还有些疑问,这里给出更多的说明。

假如分成3,4.5..个组。。当第k组(a个node)与第k+1组(b个node)混合一个组(cluster),至少需要的连接数1次,这种情况下,有且仅有2个node具有这两个cluster的全部信息。那么这个cluster至少有(a-1)+(b-1)+1 = (a+b)-1个连接,这与一个cluster的情况完全一致。

补充: y= 2n-4; 还可以使用数学归纳法证明。

k=4时,至少需要4次。4=2*4-4(自己画图试试吧);

...

设k=n,y=2n-4;

k=n+1时,将信息传递过程分成两个阶段:1)收集所有node信息。2)收集完之后,分发给信息不全的node。收集第n+1个node的信息时1次,在分发全部时1个,共2个。得y = 2n -4 +2= 2(n+1)-4;



原创粉丝点击