【问题标题】:Why d-heap is more useful for main memory than binary heap?为什么 d-heap 对主存比二叉堆更有用?
【发布时间】:2019-10-08 08:34:02
【问题描述】:

在 M.A. Weiss 第 2 版:C 中的数据结构和算法分析,当我了解 二叉堆d-heap ,有描述当优先队列太大而无法完全加载到主存时,d-heap非常有用。

我想到了一句话,在我看来,当有 N 个元素时,d-heap 需要更多的指针(大约 Nd)但高度更小,而二进制堆需要的指针更少(大约 2N)但高度更大。所以 d-heap 似乎需要更多的空间,毕竟在我看来高度不消耗内存。如果这两个是通过数组而不是指针完成的,则需要相同的 N 个数组单元。所以我无法理解:
为什么 d-heap 对于主存来说比 binary heap 更有用?

【问题讨论】:

    标签: algorithm data-structures


    【解决方案1】:

    如果您的内存空间不足以容纳整个队列,则需要一次加载它。由于这是一件很慢的事情,因此执行时间将取决于您等待加载下一个内容所花费的时间。

    假设它是一个 4 路 d-heap,并且您的 RAM 中只有足够的空间用于两个二叉堆节点或一个 d-heap 节点。你更愿意做什么:下降 10 层 d 堆,还是 20 层二叉堆?请注意,能够在内存中存储两个二进制堆节点并没有真正的用处:只有在查看了其父节点后,您才知道需要将哪个节点带入 RAM。所以使用二叉堆需要等待 19 次,使用 d-heap 需要等待 9 次。

    【讨论】:

    • 哦,我知道了。非常感谢!我对数据结构是如何加载到内存中的了解较少。如果我想了解更多关于这个过程的信息,我应该学习什么?
    • 这些东西属于数据库理论的范畴。基本上,不是将节点的子节点存储为指针,而是将它们存储为关于在文件中查找位置的信息
    • 好的,谢谢,我可以自己查找有关这方面的参考资料以了解整个理论。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2013-03-16
    • 2023-01-11
    • 2013-10-14
    • 1970-01-01
    • 2021-02-15
    • 2018-09-19
    • 2018-09-22
    • 1970-01-01
    相关资源
    最近更新 更多