我正在寻找将树放入数组的最佳方法
我们的想法是遵循这一原则:Array Implementation of Trees 但我坚持如何知道哪些节点是子节点以及哪些节点处于同一级别,因为我没有使用二叉树。
我可能要存储ASCII但我不能简单地允许256个指针的数组!
任何想法都会受到欢迎。
这样做的目的是将数组(树)发送到我的GPU,而不是使用结构。
答案 0 :(得分:0)
嗯,这是我对converting tree into an array
的想法。
获取大小为MAX_VAL
的数组,该数组是树中的节点总数。数组的类型应与节点的类型相同,但有一个额外的字段。它是其父级的索引值。您以这种方式存储每个节点。将根节点存储在第一个位置。说1
。现在,此节点的子节点随后存储有存储1
的额外字段(因为这是存储根的位置)。
在所有节点上应用此过程,您就完成了。您可以通过在每个节点上进行简单的递归调用来获取树。
希望这会有所帮助。 :):)
答案 1 :(得分:0)
Ahnentafel列表非常大,如果不是非常完美平衡的话。我的猜测是你的树不会平衡,所以隐含的父/子指针的好处将超过成本。我从未见过非二元Ahnentafel列表,但我认为它是可能的(你是否要求隐式方程式?)。
你能保留每个节点的子指针排序列表(ASCII字符+指针/索引)吗?在这种情况下,正如其他人所建议的那样,使用指针构建树并允许孩子成长可能是最好的。然后将所有节点打包到一个列表中:计算出放置节点的顺序,使用前缀和为数组中的偏移量,在每个节点上存储位置索引,最后将子列表复制到数组中(用子节点替换子节点)列表索引可以通过跟随指针并查询上一步中的索引来完成。
在CUDA中遍历一个孩子不会是恒定的时间,但是因为知道了这个顺序,所以你可以使用二进制搜索来加快速度。