战报和八卦

2013年阿里巴巴实习生笔试题目:

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

此题与八卦消息传播相同:

假如我们班有n个MM,每一个MM都有一个独家八卦消息。两个MM可以通过电话联系,一通电话将使得双方都获知到对方目前已知的全部消息。要想所有n个MM都知道所有n条八卦消息,最少需要多少通电话?请给出你们的通话方案。假如我们班有n个MM,每一个MM都有一个独家八卦消息。两个MM可以通过电话联系,一个通话将使得双方都或知到对方目前已知的全部消息。要想所有n个MM都知道所有n条八卦消息,最少需要多少通电话?请给出你们的通话方案。

问题分析:

  1. 当n很小时候我们很容易通过枚举的方法找出最佳通话方案:A1=0,A2=1,A3=3,A4=4,A5=6,A6=8
  2. 对于你比较大的情况做进一步分析:想要让n个MM共享n条八卦消息,最笨的方法莫过于两个MM之间都通一次电话,这要共需要n*(n-1)/2通电话。但事实上完全没有必要,因为在一次通话中如果通话双发所掌握的八卦消息不止一条,那么通话所交换的消息就会有多条,从而调高通话的效率、减少通话次数。
  3. 通过上面的想法,可以先把所用的消息集中于一人或者几人,然后再由这些消息汇总的人把消息传给所有人。设n个MM中有m个消息汇总人,通话方案如下:
第一步,剩下的n-m个MM每人从m个消息汇总人中随机选择一个人通电话。这样一来m个消息汇总人就掌握了所有n条八卦消息,并且她们每人所掌握的消息互不重叠,是互补的
第二步,m个消息汇总人通过打电话共享所有八卦消息。
第三步,作为消息汇总人的m个MM再通过电话将自己新得知的八卦新闻告知最开始打电话给自己的MM,是她们掌握素有n条消息。
模型求解:
按照上面的通化方案,第一步需要n-m通电话,第二步需要Am通电话,第三步需要n-m通电话。故有An=2*(n-m)+Am,进一步简化得:An=2*n-(2*m-Am)。
要使通话次数最小,就要2*m-Am最大。因此取决多少MM作为汇总人使得2*m-Am最大就成为解决这个问题的关键。记Em=2*m-Am。
当m=1时, E1=2*1-A1=2;
当m=2时, E2=2*2-A2=3;
当m=3时, E3=2*3-A3=3;
当m=4时, E4=2*4-A4=4;
当m=5时, E5=2*5-A5=4;
当m=6时, E6=2*6-A6=4;
由归纳法知当M大于4时候Em有最大值4,An有最大值2*n-4。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值