【发布时间】:2011-07-04 05:10:27
【问题描述】:
我有 m 个数组,每个数组的长度为 n。每个数组都是排序的。我想创建一个长度为 m*n 的数组,其中包含先前数组的所有值(包括重复值),并已排序。我必须合并这些数组..
我认为最佳时间复杂度是 m*n*log(m)
这是算法的草图..
我创建了一个长度为 m 的支持数组 H,其中包含每个数组第一个元素的所有值。
然后我对这个数组进行排序(m log m),并将最小值移动到输出数组。
然后我用下一个值替换移动的值,从它获取的数组中。实际上我没有替换它,但我将它插入到正确的(排序的)位置。我认为这需要 log m。
我对所有 m*n 值重复此操作...因此 m*n*log m
我的问题..你能想到一个更有效的算法吗?如果 mnlogm 实际上是最优的,你至少能想到一个更简单、更优雅的算法吗?
【问题讨论】:
-
在有序数组中插入一个元素会花费对数时间吗?
标签: arrays algorithm sorting data-structures complexity-theory