在维基百科上关于二进制堆的文章中说
对于大堆并使用虚拟内存,将元素存储在数组中 根据上述方案效率低下:(差不多)每个级别都是 在另一页
为什么?它是否与连续的数组有关?如果它存储为树,它将存储在较小的页面中吗?
答案 0 :(得分:0)
为什么?它是否与数组有关 连续?
请注意,节点i
的子节点位于索引2i
和2i+1
中。因此,通常,节点的子节点在数组中非常非常远离其父节点,因此掉到另一页面。这意味着每次进入另一个级别时,您将访问另一个页面中的内存位置。
如果它存储为树,它是否会存储在较小的页面中?
假设您的意思是使用左右指针直接将其存储为树结构:它取决于智能动态内存分配的方式,但我还是说,如果一个节点及其子节点是几乎同时分配,从而增加了在同一页面上的可能性。