偏心提到的解決方案的最佳解釋,表示爲ecc(v)
,被定義爲ecc(v):=max_u d(u,v)
,即作爲到圖中最遠頂點的距離。圖G
的中心是其中ecc(v)=min_v max_u d(u,v)
的任何頂點v
,即中心是使偏心率最小化的頂點。
如果合併兩棵樹(來自不同連接的部件),T1
和T2
,通過將它們的中心c1
和c2
之間的邊緣,你會得到一棵樹T
與diam T = max(diam T1, diam T2, 1+rad(T1)+rad(T2))
。
以下方法的正確性應該從這些屬性中顯而易見。
下面是該算法一個想法,把我的頭頂部:
- 讓
T1
,T2
,...,Tk
是包括森林樹木。
- 爲每棵樹
Ti
計算一個center vertexci
。
- 以智能的方式通過在中心之間放置邊來連接組件。
當然,現在的問題是如何巧妙地解決最後一顆子彈。直覺上我建議你先連接最大直徑的treest(然後更新新樹的直徑並計算新樹的中心)。也許是這樣的:
而優先級隊列中包含一個以上的樹做
- 讓
T1
和T2
與最大直徑的樹。讓c1
和c2
成爲他們的中心;
- 連接
c1
和c2
以形成新樹T
;
- 計算一個新的中心
c
的T
,計算diam T
並將T
放回優先級隊列(可以是使用直徑作爲密鑰的最大堆)。
做
更新。我不確定是先加入最大直徑樹還是其他方式(即最小直徑樹首先)。但現在很容易做一個證明的草圖(一旦你找到了方法),這是正確的路要走。
更新。如果您首先連接最大(如PDF中所建議的),則數學肯定會經歷。
其實嘗試過這種方法,但它給了期限超過 – suraj
解決方案爲每社論是是最大的一棵樹的 最大直徑, 最大和第二大的半徑+1的總和, 的總和第二和第三大半徑+2。問題是我不明白這個解決方案怎麼可能是正確的 – suraj
我不明白最後的評論。關於第一條評論,您可能使用了某些步驟的低效實施。 – blazs