2011-06-09 137 views
1

可能重複:
Can I represent a Red-black tree as binary leaf tree?如何在haskell中並行排序未排序的二叉樹葉子樹?

下面僅僅是一個在只有葉項小二葉的樹的例子,它們沒有排序。如果不平坦化樹,然後在再次構建排序樹之前對其進行排序,是否可以並行排序(使用parseq原語)。例如並行分類左右分支,然後對這兩個分類進行最終排序。

 /\ 
    /\ 
    / \ 
    /\ /\ 
/\/\ 
    3 1 5 2 
+0

您能否澄清一下:您是在嘗試進行合併排序,還是更復雜? – gatoatigrado 2011-06-09 02:27:36

+0

是的,我想看看如何對這樣的結構進行合併排序,然後我可以在之後添加任何並行性。類型def是:'data Tree = Leaf Int |節點(樹)(樹)' – vis 2011-06-09 02:33:24

+1

Nom重新開放。這與該用戶的其他問題不同,儘管存在一些重疊。 – sclv 2011-06-09 11:46:12

回答

2

說「不平坦」是沒有意義的,因爲樹必須被解構和重構反正:即使在您簡單的例子,每一個節點必須改變,所以你不能從現有結構保存任何。閱讀樹,執行一個合適的排序算法(合併排序似乎是一個很好的選擇,尤其是它適用於並行計算)並重構樹。沒有更好的辦法。

+0

謝謝。在我的情況下,我想要做的是並行排序左分支和右分支,然後在兩個結果之間進行合併。所以合併排序確實是最好的。對於一棵更大的樹,我可以在樹中進一步下去,並行排列幾個子樹。但然後我仍然需要做一些事情:sortList(subTreeToList(subTree)) – vis 2011-06-09 11:19:10