gpt4 book ai didi

arrays - 关于数组中的就地合并

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:20:07 25 4
gpt4 key购买 nike

我遇到了以下问题。

给定一个包含 n 个元素的数组和一个整数 k,其中 k <n。元素 {a0...ak} 和{ak+1...an} 已经排序。给出一个在 O(n) 时间和 O(1) 空间内排序的算法。

在我看来,它不可能在 O(n) 时间和 O(1) 空间内完成。问题似乎真的是在询问如何就地执行合并排序的合并步骤。如果可能的话,不会以这种方式实现合并排序吗?我无法说服自己,但需要一些意见。

最佳答案

This似乎表明可以在 O(lg^2 n) 空间中进行。我看不出如何证明在恒定空间中合并是不可能的,但我也看不出如何去做。

编辑:Chasing references,Knuth Vol 3 - Exercise 5.5.3 说“L.Trabb-Pardo 的一个相当复杂的算法为这个问题提供了最好的答案:可以在 O(n) 时间内进行稳定合并并在 O(n) 时间内进行稳定排序O(n lg n) 时间,仅使用 O(lg n) 位辅助内存用于固定数量的索引变量。

更多references我还没有读过。感谢您提出一个有趣的问题。

进一步编辑:This article声称Huang和Langston的文章有一种算法,可以在时间O(m + n)中合并大小为m和n的两个列表,所以你的问题的答案似乎是肯定的。不幸的是我无法访问这篇文章,所以我必须相信二手信息。我不确定如何将此与 Knuth 关于 Trabb-Pardo 算法是最优的声明相协调。如果我的生命取决于它,我会和 Knuth 一起去。

我现在看到这已被问及更早的 Stack Overflow question一个number次。我不忍心将其标记为重复。

黄 B.-C.和 Langston M. A.,实用就地合并,Comm。 ACM 31 (1988) 348-352

关于arrays - 关于数组中的就地合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3285756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com