一個關於交流次數的算法題

問題描述:設有n(n>4)個戰士,每個戰士都瞭解一些戰報,這些戰報不全被其他戰士瞭解。現要求通過戰士之間的交流,使得每個戰士都能獲得全部的戰報,假設兩個戰士交流後能後獲得對方已經瞭解的全部戰報。請設計算法,使得通過最少的交流即可達到所有戰士瞭解全部戰報。


思路:

  設n個戰士需交流f(n)次。
  當只有4個戰士的時候(假設編號爲1、2、3、4),最少要交流4次:1和2、3和4、1和3、2和4,f(4)=4。增加一個戰士(假設編號爲5),則需要交流6次:1和5、1和2、3和4、1和3、2和4、1和5,f(5)=6。可見,每增加一個戰士需多交流2次:(1)第一次新增戰士跟任一老戰士交流,然後等所有老戰士通過交流獲得全部的戰報,(2)最後一次新增戰士跟任一老戰士交流。
  可得f(n)=f(n-1)+2=f(4)+(n-4)*2=2n-4。
發佈了14 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章