【发布时间】:2014-08-04 08:03:57
【问题描述】:
我刚刚发现有一些基于树的数据结构,在寻求高性能时,通常会存储为连续的内存块,这在使用所谓的“基于策略的数据结构”时特别受欢迎。
问题是我无法理解为什么要这样做;当您尝试“线性化”一棵树以将其存储为向量/数组时,如何确保以有意义的方式重新排列分支和叶子以提高性能?这仅适用于完美平衡的树木吗?
换句话说,我无法想象用于访问跨越多个级别并具有多个叶子的线性数据结构的模式;通常一棵树为每个节点/叶子添加 1 级间接,这为用户简化了很多事情,但是应该如何组织这种“线性”树呢?
【问题讨论】:
-
连续存储通常可以显着提升性能。预取器可以去检索实际需要的内存。
-
您是否曾经编写过最小(或最大)heap data structure?存储在连续内存中的二叉树通常用于此类事情。有关示例和存储要求,请参阅标准库提供的heap-operations 系列。
-
只需为 x 个叶子保留一个内存块(如果需要,可以添加更多)。 Tree in an Array
-
OP:你必须有不同的想法:16 GB 的内存只是一个大的一维数组,我们几乎可以在其中存储任何东西!正是我们将数据存储在其中的方式以及将其排列成 2d、3d(或树)的方式。
-
是否可以想象这个问题有一个“正确”的答案?
标签: c++ vector tree contiguous