2011-03-25 29 views
6

在一個小型體育場內,有幾千人在看臺上。設計一個分佈式算法 使觀衆能夠自我計數。不要假設體育場的任何特定的幾何形狀,除非,如果你想,它是碗形的。明確陳述你的假設,然後提出你的算法和分析體育場問題:提供算法解決問題

我假設成員是一個鏈表,並附加計數器和免費(ptr)..我可能是錯的...請提供一些有用的見解

謝謝進階...

+0

什麼*特別*是你的問題在這裏? – 2011-03-25 12:27:43

+0

哪種算法可以幫助我以最小的複雜度解決上述問題 – garima 2011-03-25 13:12:30

+0

我認爲這是不可能的。例如,如果它是一個只有2人的大型體育場,並且它們不在對方的通信範圍內? – mbeckish 2011-03-25 16:22:21

回答

11

假設每個人都可以跟他/她的鄰居(可能在很多空座位),以及A隊的球迷都願意說話,B隊的球迷,以下可以工作:

每個人都抓住他/她最近的鄰居,這個鄰居還沒有被別人抓住,形成至多兩個人的團體。現在每個人都記得他們所在團隊的規模(可以是1或2)。現在,每個小組的領導者都可以選擇,以便他能夠與另一個小組的成員溝通。每個小組的領導人都試圖將他們的小組與另一個小組加入,兩個(現在加入的)小組中的每個小組成員都會記住每個小組的成員總數(這可以通過廣播要添加到小組中的新值來完成) 。這個過程繼續,直到只剩下一個組。在這個過程結束後,每個人都知道體育場內的人數。

希望這會有所幫助。

+0

非常感謝... – garima 2011-03-25 14:39:12

+0

+1,您的解決方案不需要太多的對稱性打破,也沒有重複計數的可能性。你可以改變以允許領導者選舉策略。 – CMR 2011-03-25 19:00:59

2

對於每一列,選擇一個領導者的規則是「最接近領域的人是領導者」(這些席位通常是填充的)。領導者按照以下方式啓動該專欄中的人員統計:
1.與直接坐在後面的人握手,然後問「你?」
2.如果沒有人在背後,回答應該是1,否則在第1步中有人在後面,答案比來自背後的人的回答多一個。
3.領導者立即將此號碼寫入董事會,並持有
4.在這些領導者中,最年輕的人應該開始收集這些董事會,並添加他們。如果她遇到一個比她的收集委員會年輕的人,那麼到那時爲止的計數會交給另一個人。如果年齡相同,高個子會接管。

3

在一個小型體育場內有幾個 千人在看臺上。設計一個分佈式算法,使 受衆能夠自我計數。

費曼回答(見round manhole question):大家都喊「幾千!」

+0

+1,問題的答案是......對'最後一個人站立'的佛教'mu'事 – CMR 2011-03-26 00:57:29

2
  • 每個人都會掉下他們的屁股,第二天當地報紙上就有「世界上第一次大規模裸奔事件」中的N人被捕。 (即應用程序要求系統完成這項工作)。
  • 每個人挑選另一個人打架,並首先詢問他們淘汰了多少人。贏家找到另一個對手,增加被擊敗的對手數。最後一個男人(或女人)的地位有答案。
  • 每個人都站起來,摘下一根頭髮,然後將它交給附近的人,在再次坐下之前至少有許多頭髮。常駐的人們也繼續尋求別人給予頭髮。最後一個人計數頭髮。
  • 你邀請人們從食堂拿一袋薄荷,然後交給他們,直到他們找不到沒有的人,然後將袋子放在中心點。乘包袋*每袋數量 - 每袋數量 - 袋裝數量。
+0

+1! – CMR 2011-04-08 12:54:21

2

這裏是另一種算法:

  1. 讓每個人都指望別人和自己。
  2. 然後,在喇叭的響聲中,每個櫃檯都響起他的計數。
  3. 保持最大的呼喊。

使用此算法,您可以應對錯誤。

+0

您的解決方案可能有效,但似乎並未分配負載。 – CMR 2011-04-08 13:02:43

+0

你是對的。這是並行計算的一個極端(或者一般的多代理):每個代理計算整個任務。這是極其容錯的。另一個極端是:每個代理人在一張紙上寫上「+1」,並將這張紙交給控制器代理。 – Jason 2011-04-08 13:40:50