2010-10-22 31 views
3

給定一組節點,如何構造一棵樹,以最小化最大(max(度),max(深度))的方式將所有節點連接在一起?計算最小的可能樹

例如,給定一組五個節點的,我可以將它們連接起來,像這樣:

max(degree) = 4, max(depth) = 1

然而,這不是最小的,因爲最大(度)== 4和max(深度) == 1,更好的樹將是:

max(degree) = 2, max(depth) = 2

具有最大(度)== 2和max(深度)== 2

編輯::算法不一定要快,但計算絕對最佳的樹很重要。

+0

我剛剛意識到我誤解了我的問題,實際上需要類似的東西,但稍有不同。我會問一個不同的問題,但謝謝你的答案球員:) – Martin 2010-10-22 13:13:27

回答

4

從相反的方向走。給定度數和深度,節點的最大數量是和= 1 +度+度^ 2 + ... +度^深度。這是整數序列A031973。您可以每次計算一次,或者只存儲第一批值。無論是哪種情況,您都會搜索最大值,並且計算出您的節點數量,然後找出相應的D =度數=深度

當您知道您的D時,只需按照您喜歡的方式填充樹,就其邊界而言。

2

具有深度==度的樹中節點的最大數量是n = Sum degree^k(k = 0到1)。事實上,總和是一個幾何系列。因此它的值等於(degree^degree-1)/(degree-1),這可能要快得多。 (儘管速度沒有關係;-)) 但是,您不能以代數方式求解方程式n =(degree^degree-1)/(degree-1),因此您必須存儲總和的預先計算值,然後選擇產生最小可能值的程度值仍然大於/等於n。