【问题标题】:multi-way merge vs 2-way merge多路合并与两路合并
【发布时间】:2012-08-02 03:13:57
【问题描述】:

当我们externally merge sort 一个大文件时,我们将其拆分为小文件,对它们进行排序,然后将它们合并回一个大的排序文件。

合并时,我们可以进行多次 2 路合并,也可以进行一次多路合并。

我想知道哪种方法更好?为什么?

【问题讨论】:

    标签: algorithm mergesort external-sorting


    【解决方案1】:

    一个多路合并通常更好。考虑三个小文件:

    a1
    a2
    a3
    

    b1
    b2
    b3
    

    最后

    c1
    c2
    c3
    

    如果您与ab 合并,我们就剩下(比如说)

    a1
    b1
    a2
    b2
    b3
    a3
    

    c1
    c2
    c3
    

    最终合并将创建排序列表,但请注意,在最终合并中,我们必须再次访问 ab 项目。正是这种重新合并在级联双向合并中是浪费的。

    您可以做的是一个单一的多路合并。但是,请注意您的操作方式。具体来说,避免简单的双循环扫描每个光标以查看哪个具有最小值。请改用最小堆。这会将复杂性降低到O(n log n)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 2020-05-26
      相关资源
      最近更新 更多