这是一个作业问题,我很难回答。
“假设一棵树每个节点最多可以有k个子节点。令v为每个节点的平均子节点数。对于v的哪个值,将子节点存储在a中更有效(就使用的空间而言)。链表与阵列中的存储?为什么?”
我相信我可以回答“为什么?”简而言之,使用链接列表会更有效,因为与其占用一堆空节点(即,如果您的平均值低于最大值,则是数组中的空索引),不如占用一堆内存,您只会分配空间当您实际填写值时,用于链接列表中的节点。
因此,如果平均有6个 child ,而最大数量为200个,则在创建树时,数组将为每个节点的所有200个 child 创建空间,但是链接列表将仅根据需要为节点分配空间。因此,通过链表,使用的空间大约是平均值的?与数组,使用的间隔将是最大。
...我不知道何时使用数组会更有效。这是一个技巧问题吗?我是否必须考虑创建阵列时需要限制节点总数的事实?
最佳答案
对于许多常用语言,该阵列将需要分配(数据的)存储k个内存地址。单链接列表将需要每个节点2个地址(数据和下一个)。双链列表每个节点需要3个地址。
令n为特定节点A的实际子代数:
值k允许您确定将2n或3n个地址平均化为 yield 还是损失,而不是简单地将地址存储在阵列中。
关于arrays - 树木: Linked Lists vs Arrays (Efficiency),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2220227/