戰報交流問題分析 gossip problem

2021-09-30 11:05:51 字數 3147 閱讀 6581

戰報交流:戰場上不同的位置有n個戰士(n>4),每個戰士知道當前的一些戰況,現在需要這n個戰士通過通話交流,互相傳達自己知道的戰況資訊,每次通話,可以讓通話的雙方知道對方的所有情報,設計演算法,使用最少的通話次數,是的戰場上的n個士兵知道所有的戰況資訊,不需要寫程式**,得出最少的通話次數。

解答:筆試時候想到的是:

n-1個人圍成乙個環,將知道的訊息告訴都第n個人,需要n-1次,同時第n-1個人與第n個人交流時,兩人互相交流訊息,這樣子第n-1與第n個人都知道了所有人的資訊,接下來第n-1人沿著環將訊息傳遞下去,需要n-2次。 所以需要n-1+(n-2)=2n-3.

但是實際上這個問題有著更優的解法。

題目:假如我們班有n個mm,每乙個mm都有乙個獨家八卦訊息。兩個mm可以通過**聯絡,一通**將使得雙方都獲知到對方目前已知的全部訊息。要想所有n個mm都知道所有n條八卦訊息,最少需要多少通**?請給出你們的通話方案。

解答:當n很小時我們很容易通過列舉的方法找出最佳通話方案:

a1=0,a2=1,a3=3,a4=4,a5=6,a6=8

可以先把所有訊息集中於乙個或幾個人,然後再由這些訊息彙總人把訊息傳給所有人。設n個mm中有m個訊息彙總人,她們共享所有訊息需要打an通**。

通話方案如下:

第一步,剩下的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)。

即當mm的個數為n時,共享所有八卦訊息共需要2*n-(2*m-am)通**。若要使通話次數最小,就要求2*m-am最大。因此取多少個mm作為訊息彙總人能使得2*m-am最大就成為解決這個問題的關鍵,它反映了mm們之間通話的效率。記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,即當有大於或等於4個訊息彙總人時可通過上述通話方案使n個mm通過最少的**數共享所有八卦訊息。此時共需要2*n-4次通話。

關於這個問題的證明,需要用到反證法的思想。 最常見的證明由brenda baker和robert shostak在2023年給出。下面給出來自matrix67的證明。

證明的關鍵在於這個引例:如果我們可以在2n-5次**以內達到要求,則整個過程中絕對不會有人在**中聽到對方八卦自己的訊息。我們將用反證法來證明這一點。首先找出最小的n使得n個人可以在2n-5次通話中傳遍訊息。如果某個人g聽到了自己的訊息,表明整個過程中存在這麼一條通話線路:(g - g1)(g1 - g2)...(gr - g)。現在,我們把g這個人去掉,再重新安排一些通話線路,使得剩下的n-1個人同樣能在2(n-1)-5次通話後傳遍資訊,從而與n的最小性矛盾。直接忽略上述「通話環」中的(g - g1)和(gr - g)兩條邊。對於其他某個人p和g之間的通話(p-g),找出(p-g)通電後最先出現的「通話環」中的其中一鏈(比如(gi - gi+1))。在新方案中,讓p把**打給gi。這樣,原方案中任何一條由p1帶給g再帶給p2的訊息,都由對應的gi、gj以及他們之間的鏈條來完成,即(p1 - gi)(gi - gi+1) ... (gj - p2)。新方案與原方案一樣滿足要求,且通話次數減少了兩次,同樣小於等於2n-5。

每個人都不會聽到自己的訊息,這可以推出乙個很有趣的東西:記一通**的雙方為a和b,則要麼a和b都還沒打完,要麼這通**對雙方來說都是最後一通。原因很簡單,假如這通**是a的最後一電,這表明a和b都知道了所有的訊息,但b還要給別人打**,別人就會聽到自己的訊息。類似地,一通**的雙方要麼都是第一次打,要麼都不是第一次打:假如a的第一通**是跟b打的,但b之前已經和c通過話了,那a的訊息將永遠與c的訊息一起傳遞,因此最終c聽到a的訊息時也會聽到她自己的。

於是,對於所有**次數不超過2n-5的情況,n只能是偶數。並且情況只可能是這樣:先兩兩配對撥打n/2通「**電」,然後中間打很多「中介**」,最後再兩個兩個地打n/2個「最後一電」。由於所有的「**電」和「最後一電」加起來恰好有n通,那麼「中介**」最多只能有n-5通。又由於連通所有n個點至少要n-1條邊,可知這些「中介**」構成了至少5個連通分量。對於任何乙個人來說,在任何「最後一電」撥打之前,她的訊息最多隻能夠在其中兩個連通分量內傳遞(她所在的連通分量和她「**電」的物件所在的連通分量);類似地,所有「**電」都打完了後,每個人都只能收到兩個連通分量內的訊息(她自己的和「最後一電」的物件的)。對於乙個特定的人g來說,除去她自己、「**電」的物件和「最後一電」的物件所在的連通分量,至少還有兩個連通分量,裡面的所有「中介**」對她沒有任何意義:這些「中介**」既不會把她的訊息傳出去,也不會把別人的訊息帶給她。設與g不相干的**通數為c(g)。

反過來,又有多少通**與g有關呢?讓我們繼續把目光停留到g身上。要想把她的訊息傳給所有人,至少需要n-1通**;要想讓所有訊息都傳到她那裡,同樣也得要n-1通**。某些**可以同時起到這兩種作用,但有乙個前提條件:這些**必需是她親自打的。否則,她自己的訊息將「**」進那些將會傳給她的訊息裡,從而與引理矛盾。假設她自己打了v(g)通**,那麼總共有2n-2-v(g)通**負責傳出她的訊息並把別人的訊息傳給她。由2n-5 ≥ 2n-2-v(g)+c(g)可知v(g) ≥ 3+c(g) ≥ 3。既然每個人都打了至少3次**,這表明每個人都打過「中介**」,直接推出每個連通分量都有至少一條邊。前面說了,c(g)包含了至少兩個連通分量中的所有邊,因此c(g)≥2。因此,v(g)≥5。每個人都打了至少5次**?這當然是不可能的,這將導致總的**數目比2n還大了。

題目中如果告訴n大於4,那麼結果就是2n-4。

交流伺服電機飛車問題

電機是三菱電機,交流伺服。故障現象,電機利用軟體控制,給定一定轉數,發現電機轉數遠遠大於給定轉數,並伴有巨大震動,現象為偶發。問題描述 某日上午,電機運轉正常,中午突然斷電,下午重啟電機以及軟體平台對電機進行控制,發現電機轉速異常,疑似飛車,速度不可控。之後排除故障原因,將軟體退回到之前版本,控制電...

交流等效電路分析法

交流等效電路分析法 在訊號輸入時,電路中各個環節的電壓或電流,就要按輸人訊號的變化規律及電路對輸 人訊號的響應規律而變化。這種變化可分兩種型別。一種是電路中各點電壓或電流的變化規律是與輸人的訊號變化規律相同的 同相或反相這種電路 就是通常所說的放大電路和lc 振盪電路,另一種是電路中各點電壓或電流的...

大資料人才戰報 十大資料分析職業趨勢

與大資料概念知名度和企業熱情形成對比的是 大資料正面臨全球性的人才荒。企業對新型大資料分析和 技術人才的熱情和需求正在超過傳統的商業智慧型和資訊管理人才。無論是資料分析的新手還是老鳥,都需要對大資料引發的資料分析職業革命做好充分的準備,以下是information week根據一次大資料企業應用調查...