在官方Python文档here上,提到:
在大磁盘类型中,堆也非常有用。你们所有人 知道大分类意味着产生“游程”(已预先分类) 序列,其大小通常与CPU内存量有关), 然后是这些运行的合并通行证,通常合并 组织得非常巧妙。
最初的 排序会产生最长的运行时间。比赛是个好方法 实现这一目标。如果使用所有可用的内存来保存 比赛中,您替换并渗入恰好适合 当前运行,您将生成两倍于 内存用于随机输入,更好地用于模糊排序的输入。此外,如果您在磁盘上输出第0个项目并获得输入 可能不适合当前比赛(因为“胜出” 最后的输出值),它不能容纳在堆中,因此 堆减少。释放的内存可以被巧妙地重用 立即逐步建立第二个堆,该堆在 第一堆融化的速率完全相同。
当第一堆 完全消失,您切换堆并开始新的运行。聪明和 很有效!
我知道一种叫做External sorting的算法,在该算法中,我们:
我完全理解Wikipedia上所述的外部排序,但是当他们说:
如果使用所有可用于举办比赛的内存替换 并渗透恰好适合当前运行的物料,您将产生 运行是随机输入的内存大小的两倍,并且 更好地用于模糊排序的输入。
和:
此外,如果您在磁盘上输出第0个项目并获得输入 可能不适合当前比赛(因为“胜出” 最后的输出值),它不能容纳在堆中,因此 堆减少。
这是什么 堆熔化 ?
答案 0 :(得分:0)
堆熔化不是问题。这只是作者用来使堆变小以拉出最小项目的词。
他正在谈论的想法是对外部排序中“将输入分为多个块并对每个块进行排序”部分的巧妙替代。它会产生更大的排序块。
想法是,您首先将可以读取的最大块读入内存,然后将其排列到堆中,然后在读取新元素时开始从堆中写出最小的元素。
当您读入一个小于已写出的元素的元素时,它就不能进入当前块(这会破坏排序),因此您要记住下一个块。不小于您写入的最后一个元素的元素可以插入堆中。他们会将其放入当前块中,使当前块变大。
最终,您的堆将为空。到那时,您已经完成了当前块的工作-堆放您记住的所有元素,然后开始写出下一个块。