algorithm - 大树数据结构是如何遍历的?

标签 algorithm recursion graph tree

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

我能想到的一些方法是

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

任何更好的方法,如果有人可以分享指向此类问题的学习 Material 的链接,将会有所帮助。

最佳答案

如果这棵树适合内存,你就可以走它。我构建了构建具有数百万个节点的 AST 的工具(来自很多树,有时来自非常深的树);我们将树存储在内存中。递归遍历工作得很好。而且,如果操作得当,每个节点只需数十纳秒(缓存行丢失时间)即可完成。

固定大小的堆栈通常会搞砸,因为这样的堆栈可以防止任意深度递归。参见 How does a stackless language work?我编写树操作代码的语言没有固定大小的堆栈。

您可以将树分布在多个机器上或(更糟!)数据库中。你仍然可以走过那棵树,但算法比较笨拙,而且额外的通信延迟(到远程机器,到数据库表)使这成为一个如此缓慢的操作,几乎没有人这样做。

关于algorithm - 大树数据结构是如何遍历的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35530836/

相关文章:

c++ - 弹跳球逻辑

algorithm - 具有聚类特性的图像量化算法

python - 在 Python 中,如果在递归调用后未使用变量,递归函数中变量的内存是否会被释放?

java - JUNG 嵌套节点

javascript - 自动放置流程图形状的算法

r - 如何将图形转换为 R 中的等效线图/边图/交换图?

java - 使用链表实现二叉堆

c++ - 给定一个二维字符矩阵,我们必须检查给定的单词是否存在于其中

python - 在Python中的嵌套字典中存储目录结构

jQuery对对象的递归迭代