C++ 设计缓存优化的N元树

C++ 设计缓存优化的N元树,c++,algorithm,caching,tree,C++,Algorithm,Caching,Tree,我正在寻找如何最好地设计一个能有效使用缓存的N元树的方法。我希望树上的绝大多数操作都是节点到根的遍历,所以这就是我想要针对的用例,这意味着插入/删除相当昂贵 在我的头上,将节点从前到后存储(即在末尾存储根节点)是一个理想的属性。然后我想你可以将它存储在BFS或DFS中,哪一种最适合这种情况?一旦树长到一定的大小,这有关系吗 我也曾短暂地遇到过这一点——这听起来很有希望,但这不是一个BST,我不需要任何类型的搜索,只需要子到根的遍历 编辑:是的,需要在向量/数组上实现它,所以是连续内存。它不需要是

我正在寻找如何最好地设计一个能有效使用缓存的N元树的方法。我希望树上的绝大多数操作都是节点到根的遍历,所以这就是我想要针对的用例,这意味着插入/删除相当昂贵

在我的头上,将节点从前到后存储(即在末尾存储根节点)是一个理想的属性。然后我想你可以将它存储在BFS或DFS中,哪一种最适合这种情况?一旦树长到一定的大小,这有关系吗

我也曾短暂地遇到过这一点——这听起来很有希望,但这不是一个BST,我不需要任何类型的搜索,只需要子到根的遍历

编辑:是的,需要在向量/数组上实现它,所以是连续内存。它不需要是BST。节点通过向量/数组的随机访问属性直接访问,问题在于从那里到根的遍历


有什么想法吗?

请看一下Judy阵列:


你为什么要穿过这棵树?为了找到叶子和根之间的节点,我假设?首先,如何找到正确的叶节点?如果通过节点*找到叶,则无法移动它们,这会使插入变得复杂。能否将节点存储在连续的数据结构中,例如向量?你的数据有多大,你的树有多大?我不确定我是否完全理解这个问题,但是如果你想要一个使用缓存的BST,就选择B+树。现在已经有很多实现。使用DFS有序存储有时会很幸运,但通常情况下会非常糟糕,因为在内存中只有一个子级接近父级,而与BFS一样,每次可以始终获得两层。但是,如果访问某些子节点的次数明显增加,并且您知道这一点,或者许多节点只有一个子节点,那么DFS排序会更好。虽然听起来你在试图解决一个已经基本上由b-树解决的问题。也许我对最近这个问题的回答是有用的:。它将树存储在一个相邻的区域中,并在每个节点的信息中包含父id,因此很容易找到根。