如何將不平衡樹轉換爲(平衡)生成樹?假設我有一棵樹(在不同的節點有不同的(不一定是不同的)數量的孩子)。我想操縱這棵樹,使它成爲一棵k-ary的生成樹。將不平衡樹轉換爲生成樹
樹上各種迭代是允許的。限制是我們不能只收集一個地方的所有節點,然後在其中創建一個生成樹(這將是一個微不足道的方法)。相反,必須從給定的樹創建生成樹。也就是說,孩子可以與父母(和祖父母,如果需要的話)交換信息(例如,孩子節點的數量和孩子節點的ID),並且父母決定移動孩子之間的節點(按順序以平衡樹)。
你可能已經明白,我試圖做到這一點在並行計算環境。其中,一個節點知道的是它的父節點,它的子節點以及每個子樹中以子節點爲根節點的節點數。
(家長和孩子會改變,因爲我們努力平衡樹)。有關如何解決這個問題的任何提示?
回覆的意見,即爲什麼這個問題很重要/值得考慮 - 畢竟瑣碎apporach是可伸縮的:
從理論上來說是具有挑戰性的開發使用爲O較小(算法N)空間(用於平凡的方法)來構建生成樹。
有趣的是,考慮替代解決方案接近大規模。
至於數字而言:N = 100,000(這是在今天的超級計算機常見,N將在即將到來的BG/Q 1000,000)。在所採用的簡單方法步驟中,a)全部減少b)O(N)以構建生成樹,並且c)最後進行一對多廣播。
另一種分佈式的方法可能不會給太大起色,但出curosity它可能是值得一試。
爲什麼我們不平衡像AVL樹一樣的樹? – Pih 2011-05-15 22:29:23
AVL樹是平衡的二叉搜索樹。在這個問題中,我們只有一個隨機樹,其中有一個節點有任意數量的子節點(AVL樹中不是這種情況)。生成的樹除了是一個平衡的k-ary生成樹之外,不必遵循任何其他屬性。 – Akhil 2011-05-16 01:47:11
爲什麼你認爲有一個k-ary生成樹可能?想象一下,這只是一個線性鏈。生成樹是線性鏈的同構拷貝(具有任意選擇的根節點)。你不能用它製作K-tree。您至少要軟化您的要求,以生成最小深度的樹。 – 2011-05-16 01:57:34