我有一棵二叉树,它访问节点的速度相对较快,但叶子除外——它们可能慢 100-1000 倍。我有一个递归算法,我想在 go 中实现(我是新手)。
因为我必须到达叶子节点才能从并行性中受益,所以我需要在树中将执行并行化得更高。不过,这可能会导致数百万个 goroutines。用信号量限制这一点似乎不是“可行”的方式——没有这样的同步原语。我担心的另一个问题是,实际上,一个频道有多贵,我是否应该使用等待组。
我的树是抽象的,算法在它上面运行,按级别和索引识别项目。
// 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)
}
我的方法应该是什么?有人可以指出我在 Go 中实现的递归树多线程算法吗?
繁星淼淼
杨__羊羊
相关分类