体育场问题:提供算法来解决问题

时间:2011-03-25 12:12:59

标签: c algorithm puzzle

在一个小型体育场内,看台上有数千人。设计分布式算法 使观众能够统计自己。不要假设体育场的任何特定几何形状,除非你想要,它是碗形的。明确说明您的假设,然后展示您的算法和分析

我假设成员是一个链接列表并附加计数器和免费(ptr)..我可能错了......请提供一些有用的见解

先谢谢...

5 个答案:

答案 0 :(得分:11)

假设每个人都可以与他/她的邻居(可能在很多空座位上)交谈并且A队的球迷愿意与B队的球迷交谈,以下情况可以起作用:

每个人都抓住他/她最近的邻居,而这个邻居还没有被其他人抓住,最多只能组成两个人。现在每个人都记得他们所在群体的大小(可以是1或2)。现在,每个组的领导者都以他能够与另一个组的成员进行交流的方式进行选择。每个小组的领导者都试图加入他们的小组,两个小组(现已加入)的每个成员都会记住每个小组成员的总和(这可以通过广播要添加到小组的新值来完成) 。此过程将继续,直到只剩下一个组。在此过程终止后,每个人都知道体育场内的人数。

希望这有帮助。

答案 1 :(得分:3)

  

在一个小型体育场内有几个   看台上有一千人。设计   一种分布式算法   观众要自己计算。

费曼回答(见round manhole question):大家都喊“几千!”

答案 2 :(得分:2)

对于每一列,选择一个领导者,其规则是“最靠近该领域的人是领导者”(这些席位通常是填充的)。领导者以下列方式启动该栏目中的人员计数:
1.与直接坐在后面的人握手,问:“你?” 2.如果没有人在这个人后面,那么回复应该是1,否则在后面跟人做第1步,答案不仅仅是后面人的回答。
领导者立即将这个号码写在一块板上,然后把它举起来 在这些领导者中,最年轻的人应该开始收集这些板,并添加它们。如果她遇到的人比她的收集板年轻,那么直到那时的计数会交给另一个人。如果年龄相同,则较高的人会接管。

答案 3 :(得分:2)

  • 每个人都放弃了他们的傻瓜,第二天在当地报纸上可以找到“输出”ala“N人在世界上第一次大规模裸奔事件中被捕”。 (即应用程序要求系统完成工作)。
  • 每个人都会挑选另一个人去战斗,并首先询问他们已经淘汰了多少人。胜利者找到另一个对手,加上失败的对手的数量。最后一个人(或女人)站在那里有答案。
  • 每个人都站起来,拔头发,然后把它交给附近的人,至少和头发一样多,然后再坐下来。常备人也继续寻求他人发。最后一个人计算头发。
  • 你邀请人们从食堂拿一袋薄荷,然后把它们递给他们,直到他们找不到任何没有过的人,然后把包放在中心位置。将袋子加倍*每袋精美数量 - 薄荷袋数量 - 袋装袋。

答案 4 :(得分:2)

这是另一种算法:

  1. 让每个人和他自己一起数。
  2. 然后,在一个号角的声音中,每个计数器都喊他的数。
  3. 保持最大声。
  4. 使用此算法,您可以应对错误。