節點通訊共享信息的問題

(阿里筆試題)現有一完全的P2P共享協議,每次兩個節點通訊後都能獲取對方已經獲取的全部信息,現在使得系統中每個節點都知道所有節點的文件信息,共17個節點,假設只能通過多次兩個對等節點之間通訊的方式,則最少需要()次通訊 

      A、32            B、31            C、30              D、29

這是第二次碰到類似的題目了,所以在這裏分析一下。

假設有n個節點,直觀的按照1-2-···-(n-1)-n傳播順序,最後n-1和n獲得了所有節點的信息,然後取其中任一節點與1、2、···、n-2這些節點交換信息,即可讓所有節點獲得所有信息,這樣通訊次數=n-1+n-2=2n-3;

如果分成兩個組呢,假設兩個組的節點個數分別爲n1和n2,則每個組首先需要按序傳播信息N1=n1-1+n2-1,然後第一組最後兩個節點和第二組的最後兩個節點就獲得了各自組的所有信息,這四個節點兩兩交換信息,需要N2=2次,則這四個節點獲得了兩個組所有節點信息,然後取任一節點與每個組剩下的節點(分別是n1-2,n2-2)交換信息N3=n1-2+n2-2,則通訊任務完成,總共通訊次數N=N1+N2+N3=2n1-3+2n2-3+2=2(n1+n2)-4=2n-4;

如果分成三個組,同樣的分析N=2n1-3+2n2-3+2n3-3+6=2n-3,其中6表示三個組的最後兩個節點交換信息需要6次;

那如果分的組數更多呢,假設分爲g組(g>=4),同上分析N=2n-3g+M,其中M表示g個組的最後兩個節點交換信息所需要的最少次數。假設把這些點的通訊按照兩個組的模式來處理,則M=2*(2g-4),N=2n+g-8>=2n-4。假設按三個組的模式來處理,則M=2*(2g-3),N=2n+g-6>=2n-2,可見它們都是大於等於2n-4,而且隨着g的變大通訊次數也會增多。

所以最優的情況就是在分成兩個組或者四個組的時候取到,最優情況下通訊次數爲2n-4.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章