相关疑难解决方法(0)

合并排序数组,最佳时间复杂度是多少?

我有m个数组,每个数组的长度为n.每个数组都已排序.我想创建一个长度为m*n的单个数组,其中包含前面数组的所有值(包括重复值),已排序.我必须合并这些数组..

我认为最佳时间复杂度是m*n*log(m)

这是算法的草图..

我创建了一个lenth m的支持数组H,它包含每个数组的第一个元素的所有值.

然后我对这个数组(m log m)进行排序,并将min值移动到输出数组.

然后我将移动的值替换为下一个移动的值.实际上我不替换它,但我将其插入右侧(已排序)位置.我认为这需要记录.

我对所有m*n值重复这一点......因此m*n*log m

我的问题..你能想到一个更有效的算法吗?如果mnlogm实际上是最佳的,你至少可以想到一个更简单,更优雅的算法吗?

arrays sorting algorithm complexity-theory data-structures

6
推荐指数
1
解决办法
3675
查看次数

使用优先级队列合并K-排序列表

在我的算法类中,我被要求制作一个K-way合并算法,该算法O(nlogk) 在搜索之后我发现它可以通过制作ak长度优先级队列并将其与每个列表的第一个元素一起排队来完成.提取最小值,将其附加到结果并从已提取元素的列表中排队.我很困惑:

  1. 它如何知道特定列表何时耗尽,假设列表的元素小于其他列表中的每个其他元素?

  2. 如何知道元素是哪个列表(如果结构不用于定义)?

  3. 时间复杂度如何O(nlogk)

编辑:

如果有人可以逐步记下算法会更有帮助,因为我已经读过的所有内容都在句子中并且很难理解它的方式,如果有人能够记下算法可能有助于理解.

arrays algorithm merge

3
推荐指数
1
解决办法
6468
查看次数