Algorithm 如何遍历大型树数据结构?

Algorithm 如何遍历大型树数据结构?,algorithm,recursion,graph,tree,Algorithm,Recursion,Graph,Tree,我在研究树算法,几乎所有的算法都使用递归进行遍历,当然遍历也可以不用递归(通过创建堆栈数据结构和while循环)来完成。但出于好奇,我想知道当树中存在数百万或数十亿个节点时,这些树数据结构是如何被遍历的?当然,这些问题也会在采访中被问到 我能想到的一些方法是 将树作为不同的子树存储在多个文件中并遍历 通过文件 将树分布在不同的机器上 在数据库中以表结构存储树并设计查询 横穿 任何更好的方法,如果有人能分享链接来研究这类问题的材料,都会有所帮助 如果这棵树适合记忆,你就可以走过去。我构建的工具

我在研究树算法,几乎所有的算法都使用递归进行遍历,当然遍历也可以不用递归(通过创建堆栈数据结构和while循环)来完成。但出于好奇,我想知道当树中存在数百万或数十亿个节点时,这些树数据结构是如何被遍历的?当然,这些问题也会在采访中被问到

我能想到的一些方法是

  • 将树作为不同的子树存储在多个文件中并遍历 通过文件
  • 将树分布在不同的机器上
  • 在数据库中以表结构存储树并设计查询 横穿

任何更好的方法,如果有人能分享链接来研究这类问题的材料,都会有所帮助

如果这棵树适合记忆,你就可以走过去。我构建的工具可以构建具有数百万个节点的AST(都来自很多树,有时甚至来自非常深的树);我们把树储存在记忆中。递归遍历工作得很好。而且,如果操作正确,每个节点只需要几十纳秒(缓存线未命中时间)

固定大小的堆栈通常会把这搞砸,因为这样的堆栈可以防止任意深度的递归。查看代码树操作没有固定大小堆栈的语言


您可以将分布在不同机器上的树或(更糟的!)存储在数据库中。您仍然可以遍历该树,但算法比较笨拙,而且通信(到远程机器、到数据库表)中的额外延迟使该操作变得非常缓慢,几乎没有人这样做。

如此接近:这是一个编程问题。你们为什么要关闭这个?谢谢Ira的回答,你们所说的非固定大小的堆栈是什么意思,主要是当我们进行递归时,使用的是系统堆栈,它是固定的?可能是我不明白什么?当我们做递归时,我们使用了一些堆栈。如果它被定义为连续存储,则通常具有预先分配的大小。阅读提供的链接。