arrays - 树木: Linked Lists vs Arrays (Efficiency)

标签 arrays tree performance linked-list theory

这是一个作业问题,我很难回答。

“假设一棵树每个节点最多可以有k个子节点。令v为每个节点的平均子节点数。对于v的哪个值,将子节点存储在a中更有效(就使用的空间而言)。链表与阵列中的存储?为什么?”

我相信我可以回答“为什么?”简而言之,使用链接列表会更有效,因为与其占用一堆空节点(即,如果您的平均值低于最大值,则是数组中的空索引),不如占用一堆内存,您只会分配空间当您实际填写值时,用于链接列表中的节点。

因此,如果平均有6个 child ,而最大数量为200个,则在创建树时,数组将为每个节点的所有200个 child 创建空间,但是链接列表将仅根据需要为节点分配空间。因此,通过链表,使用的空间大约是平均值的?与数组,使用的间隔将是最大。

...我不知道何时使用数组会更有效。这是一个技巧问题吗?我是否必须考虑创建阵列时需要限制节点总数的事实?

最佳答案

对于许多常用语言,该阵列将需要分配(数据的)存储k个内存地址。单链接列表将需要每个节点2个地址(数据和下一个)。双链列表每个节点需要3个地址。

令n为特定节点A的实际子代数:

  • 数组使用k个内存地址
  • 单链接列表使用2n个地址
  • 双链列表使用3n个地址

  • 值k允许您确定将2n或3n个地址平均化为 yield 还是损失,而不是简单地将地址存储在阵列中。

    关于arrays - 树木: Linked Lists vs Arrays (Efficiency),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2220227/

    相关文章:

    javascript - 根据另一个数组对数组进行排序

    java - 如何在二维数组中随机选择一种大小

    mysql - 在ExtJS 4中,将树的节点和子节点保存到MySQL数据库中。关于ExtJS最简单的方法有什么想法吗?

    java - R 树节点应该有多少个子节点(最小值、最大值)?

    .net - 我什么时候应该使用像 Math.NET 这样的线性代数库

    python - 将一个 int 转换为 pandas 中的多个 bool 列

    jquery - 在 .attr 上组合多个元素

    Javascript循环节点数组获取替代条目

    java - 如何将多个 ArrayList 连接成一个?

    javascript - 如何避免两次走树