我有m个长度为n的数组,每个数组都是排序的。 我想创建一个长度为m*n的单个数组,其中包含先前数组的所有值(包括重复值),并进行排序。 我必须合并这些数组。
我认为最优的时间复杂度是m*n*log(m)。
以下是算法的概述。
我创建了一个支持数组H,其长度为m,包含每个数组的第一个元素的所有值。
然后,我对此数组进行排序(m log m),并将最小值移动到输出数组中。
然后,我用从它被取出的数组中的下一个值替换已移动的值。实际上,我不会替换它,而是将其插入正确(排序)的位置。我认为这需要log m。
我为所有m*n个值重复此操作...因此m*n*log m
我的问题是:您能否想到更有效的算法? 如果mnlogm实际上是最优的,您至少可以想到一个更简单,更优雅的算法吗?
我认为最优的时间复杂度是m*n*log(m)。
以下是算法的概述。
我创建了一个支持数组H,其长度为m,包含每个数组的第一个元素的所有值。
然后,我对此数组进行排序(m log m),并将最小值移动到输出数组中。
然后,我用从它被取出的数组中的下一个值替换已移动的值。实际上,我不会替换它,而是将其插入正确(排序)的位置。我认为这需要log m。
我为所有m*n个值重复此操作...因此m*n*log m
我的问题是:您能否想到更有效的算法? 如果mnlogm实际上是最优的,您至少可以想到一个更简单,更优雅的算法吗?