面试题:n个士兵通过电话交流各自的情报,如何才能是交流次数最少?

zzmc 2013-05-05 04:06:46
n个士兵通过电话交流各自的情报,如何才能是交流次数最少?
每个士兵的情报不一样。
最后要求每个士兵都知道其他人的情报。
好像是路由表算法??
请说下方法,并算一下交流的次数是多少!
...全文
1194 46 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
nice_cxf 2013-05-06
  • 打赏
  • 举报
回复
引用 28 楼 benglehan 的回复:
[quote=引用 27 楼 nice_cxf 的回复:] 想错了主要算错了7,应该是10 ,实际对于n=2,结果1,n=3,结果3,其他=2*n-4 方案为:分为2组,第一组2个,其他第二组,第一组两个互通,第二组花费n-3个找到2个可以知道本组全部数据的,然后这4个两两联通,2次,4个知道全部数据,剩余n-4个花n-4次 一共1+(n-3)+2+(n-4) =
8:13 9:15 都是2n-3[/quote] 8怎么13 ? 12次没问题啊 ,1-2 ,3-4, 4-5,5-6,6-7,7-8 ,1-7,2-8 ,3-1 ,4-1,5-1,6-1
bbsctor 2013-05-06
  • 打赏
  • 举报
回复
引用 13 楼 snake_xiongyang 的回复:
上面错了 把次数弄成层数了 得到全信息需要n-1次交流,没有任何投机取巧的办法 通知全信息需要n-2次交流,最后得到全信息的两个人都不需要通知了,他们可以去通知别人。 答案就是2(n-1) -1 lg(n)向上取整 *2 是能够并发 n/2 路时,最快的通知时间步数。
二路归并
BowenHan 2013-05-06
  • 打赏
  • 举报
回复
引用 27 楼 nice_cxf 的回复:
想错了主要算错了7,应该是10 ,实际对于n=2,结果1,n=3,结果3,其他=2*n-4 方案为:分为2组,第一组2个,其他第二组,第一组两个互通,第二组花费n-3个找到2个可以知道本组全部数据的,然后这4个两两联通,2次,4个知道全部数据,剩余n-4个花n-4次 一共1+(n-3)+2+(n-4) =
8:13 9:15 都是2n-3
nice_cxf 2013-05-06
  • 打赏
  • 举报
回复
想错了主要算错了7,应该是10 ,实际对于n=2,结果1,n=3,结果3,其他=2*n-4 方案为:分为2组,第一组2个,其他第二组,第一组两个互通,第二组花费n-3个找到2个可以知道本组全部数据的,然后这4个两两联通,2次,4个知道全部数据,剩余n-4个花n-4次 一共1+(n-3)+2+(n-4) =
bonlog 2013-05-06
  • 打赏
  • 举报
回复
有本书,是国外的人所著的,内容是数据结构, 有一道课后题,就是这个, 解为:构所树来,遍历
就是那个党伟 2013-05-06
  • 打赏
  • 举报
回复
应为要得到全信息,最后的话应该全部再交流一次才行吧
Eversnow 2013-05-06
  • 打赏
  • 举报
回复
要火 先占个座再看
zilaishuichina 2013-05-06
  • 打赏
  • 举报
回复
平衡2叉树 这题关键在于 A跟B交流一次情报之后,B就有了2份情报,B再C交流的时候,B可以将2份情报一起交给C 每个人作为树的一个结点,构建平衡2叉树之后,就变成了首先从叶子节点开始向根节点汇总情报,然后根节点在将汇总的情报一层层传达到叶子节点 所以交流的次数是 2*(n-1)
nice_cxf 2013-05-06
  • 打赏
  • 举报
回复
这题大概没有通项公式,程序写都很复杂,思路是分为两组,少的那组全联,多的那组尽快找到跟少的那组相同的知道本组全部数据的数目,而具体怎么分要看具体数字。。。 3:3 4:4 :221-2,3-4,1-3,2-4 5:6:1-2,3-4,4-5,4-1,5-2,3-2 6:8 。。。。
回者 2013-05-06
  • 打赏
  • 举报
回复
可能是2n-1呀
lin5161678 2013-05-06
  • 打赏
  • 举报
回复
引用 13 楼 snake_xiongyang 的回复:
上面错了 把次数弄成层数了 得到全信息需要n-1次交流,没有任何投机取巧的办法 通知全信息需要n-2次交流,最后得到全信息的两个人都不需要通知了,他们可以去通知别人。 答案就是2(n-1) -1 lg(n)向上取整 *2 是能够并发 n/2 路时,最快的通知时间步数。
不好意思 原来我们的答案是一样的 你的答案2*(N-1)-1 == 我的答案2-(N-2)+1
lin5161678 2013-05-06
  • 打赏
  • 举报
回复
A B C D E 2*(N-2)+1 == 2*3+1 == 7 A <-> D A:[A] D:[AD] B <-> D B:[B] D:[ABD] C <-> D C:[C] D:[ABCD] D <-> E D:[ABCDE] E:[ABCDE] A <-> D D:[ABCDE] A:[ABCDE] B <-> D D:[ABCDE] B:[ABCDE] C <-> D D:[ABCDE] C:[ABCDE] 好吧 直接的公式弄错了 2*(N-2)+1 不是 减一
lin5161678 2013-05-06
  • 打赏
  • 举报
回复
引用 13 楼 snake_xiongyang 的回复:
上面错了 把次数弄成层数了 得到全信息需要n-1次交流,没有任何投机取巧的办法 通知全信息需要n-2次交流,最后得到全信息的两个人都不需要通知了,他们可以去通知别人。 答案就是2(n-1) -1 lg(n)向上取整 *2 是能够并发 n/2 路时,最快的通知时间步数。
2(n-2)-1
zzmc 2013-05-06
  • 打赏
  • 举报
回复
引用 16 楼 feibuhui123 的回复:
遍历 1~n 这n个人; 首先取出 1号 和 2号, 如果 1 认识 2, 那么把 1 去掉;--如果1不认识2,就可以把2去掉了。 如果 2 认识 1, 那么把 2 去掉; 如果 1 和 2 都互相不认识,把他们都去掉; 如果有剩下,在拿剩下的和3号进行比较; 如果没有剩下的,则拿出3号和4号进行比较; 如此循环; 最后若剩下最后1个人,再遍历一遍看是否剩下的n-1个人都认识它 时间复杂度分析: 每对之间的比较最多比较2次, 每对之间的比较至少淘汰1个人,要淘汰n-1个人最多比较 2*(n-1)次; 所以时间复杂度是 O(n)的
我错拉,这是另外一道题的答案!!!
zzmc 2013-05-06
  • 打赏
  • 举报
回复
遍历 1~n 这n个人; 首先取出 1号 和 2号, 如果 1 认识 2, 那么把 1 去掉;--如果1不认识2,就可以把2去掉了。 如果 2 认识 1, 那么把 2 去掉; 如果 1 和 2 都互相不认识,把他们都去掉; 如果有剩下,在拿剩下的和3号进行比较; 如果没有剩下的,则拿出3号和4号进行比较; 如此循环; 最后若剩下最后1个人,再遍历一遍看是否剩下的n-1个人都认识它 时间复杂度分析: 每对之间的比较最多比较2次, 每对之间的比较至少淘汰1个人,要淘汰n-1个人最多比较 2*(n-1)次; 所以时间复杂度是 O(n)的
zzmc 2013-05-06
  • 打赏
  • 举报
回复
听其他人说,可以用二分法来做。 n个人分成两个组,然后每个组再分成2个组。 如8个人: 1---5 2---6 3---7 4---8 然后再分。 不过这样只能解决 2的倍数的。 如果是3的倍数的n则,要再分情况了。
nice_cxf 2013-05-06
  • 打赏
  • 举报
回复
似乎没看到有正确答案 4个是4次: 1-2,3-4,1-3,2-4 6个是8次, 1-2,3-4,5-6,1-3,1-5,3-6,2-1,4-1
lengmose 2013-05-06
  • 打赏
  • 举报
回复
引用 4 楼 tczl1992 的回复:
我认识的一位大神说 构建 平衡二叉树解决
请问以下 思路是怎样的呀
cmztestat 2013-05-06
  • 打赏
  • 举报
回复
我也认为是2n-3 第一个人先打电话收集所有人的情报,然后把情报再发给除最后一人和自已的所有人,因为在收集情报到最后一人的时候就把情报给他了,所以可以少一次发情报,而第一人本身作为收发的人,所以减去第一人的2次:固为2n-3
Scutware 2013-05-06
  • 打赏
  • 举报
回复
是2n-4。。。
加载更多回复(25)

65,180

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧