【问题标题】:Merge k sorted arrays, with different lengths合并k个不同长度的排序数组
【发布时间】:2020-05-24 02:35:40
【问题描述】:

n 是 2 的幂。给定 logn-1 排序数组的长度分别为 1,2,4,8,...,n/2,描述确定性算法将它们合并为一个排序数组。 我想也许可以保留指向每个排序数组第一个元素的指针,将所有第一个项目插入二进制堆,然后删除 min.但是长度不同的事实让我觉得这个解决方案可能不是最好的。

解决这个问题的最有效方法是什么?

【问题讨论】:

  • 这是一个有趣的问题,但如果我记得从我的日子里回答正确的话。您需要将它们一个一个地合并为大小为 1 的合并数组与大小为 2 的数组并得到一个大小为 3 的数组。将大小为 3 的数组与大小为 4 的数组合并……依此类推……这样你仍然每次只比较 2 个元素,不需要最小堆。

标签: arrays sorting merge


【解决方案1】:

合并最小的运行。在这种情况下,合并大小为 {1,2} 的运行以创建大小为 3 的运行。合并大小为 {3,4} 的运行以创建大小为 7 的运行。合并大小为 {7,8} 的运行以创建大小为尺寸 15。...等等。

这是对链表进行自下而上合并排序时的情况,它使用一个小的“列表”数组(指向节点的指针或引用),其中 array[i] 是大小为 2^i {1 ,2,4,8,...}。将源列表中的所有节点合并到数组中后,再将数组合并为一个列表,从数组[0]开始。

https://en.wikipedia.org/wiki/Merge_sort#Bottom-up_implementation_using_lists

【讨论】:

    猜你喜欢
    • 2019-07-13
    • 2018-04-19
    • 2023-03-11
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多