我有一個二叉樹,訪問一個節點相對較快,除了葉子 - 它們可能會慢100-1000倍。我有一個遞歸算法,我想在去執行(我是新來的)。golang並行遞歸掃描樹
因爲我必須去樹葉才能從並行性中獲益,所以我需要在樹中更高的並行執行。這雖然可能會導致數百萬套房屋。限制信號量似乎不是'去'的方式 - 沒有這樣的同步原語。我的另一個問題是,實際上,一個頻道的價格有多昂貴,我應該用等候組來代替。
我的樹是抽象的,算法在其上運行,通過級別和索引來識別項目。
// l3 0
// / \
// l2 0 1
// /\ / \
// l1 0 1 2 3
// /\/\/\ /\
// l0 0 1 2 3 4 5 6 7
例如,我可以在一個載體使用這種計算所有項目的總和與功能:
func Sum(level, index int, items []int) int {
if level == 0 {return items[index]}
return Sum(level-1, index*2, items) + Sum(level-1, index*2+1, items)
}
應該是什麼我的做法?有人可以指向我實現的遞歸樹多線程算法嗎?
這將有助於回答這個問題,如果你表現出你的樹的定義。我不確定你的意思是葉片變慢。 – Logiraptor
@Logiraptor它不是我的情況,但圖像文件系統和你在文件上進行操作 - 比如說計算哈希。瀏覽目錄在葉子上工作比較便宜。否則我的樹很抽象 - 我不保存它。我只是使用級別,索引來標識項目。 – gsf
您能否接受我的回答或評論爲什麼它不能解決您的問題? :) – Logiraptor