【问题标题】:What is the reason inplace_merge requires additional memoryinplace_merge 需要额外内存的原因是什么
【发布时间】:2013-07-10 16:50:41
【问题描述】:

我知道这个问题: inplace_merge: What causes a complexity of N*log(N) vs. N-1?

但我发现答案不令人满意,因为我对 A 真正感兴趣的部分没有得到清楚的解释。 更具体地说,不清楚(对我来说:))为什么不能 inplace_merge 在线性时间内进行就地合并而无需任何额外的内存,只需从开始和当前项目大于第二范围(中间,结束)就可以恒定时间交换。

【问题讨论】:

    标签: c++ sorting stl


    【解决方案1】:

    假设您正在合并两个已排序的子序列:

    11, 12, 13, 14     1,  2,  3,  4
    ^                  ^
    

    1

     1, 12, 13, 14    11,  2,  3,  4
         ^             ^
    

    11

     1, 11, 13, 14    12,  2,  3,  4
             ^         ^
    

    12

     1, 11, 12, 14    13,  2,  3,  4
                 ^     ^
    

    13

     1, 11, 12, 13    14,  2,  3,  4
                   ^   ^
    

    您已到达其中一个子序列的末尾,因此您停下来。合并后的序列是否排序?

    【讨论】:

    • 哇!还要将元素从第一个范围插入第二个,您需要进行二进制搜索,以便解释 log n 因子... tnx
    猜你喜欢
    • 2015-02-04
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多