合并K个长度为N的排序数组

时间:2019-02-20 00:33:19

标签: algorithm performance sorting big-o

这是书中所述的问题:

  

假设给定的 K 个排序数组每个都有n个元素,并且您想将它们组合成一个 kn 个元素的数组。您使用以下方法:首先合并第一个和第二个数组,然后将结果数组与第三个数组合并,然后将结果与第四个数组合并,依此类推,直到合并第k个和最后一个输入数组。忽略常数因子和低阶项,此连续合并算法所需的运行时间为 k n 的函数。

我知道在合并第一个和第二个数组时,我最多将有N个比较,然后与第三个数组进行结果比较,我将最多有2N个比较,然后与第四个数组合并最多可以进行3N次比较,等等。

总共可以进行

的比较

N + 2N + 3N + 4N + ... +(k-1)N

但是,我不确定从这儿去哪里。我尝试过在线查找,但是他们只是给出算术求和公式,但是我不太了解它的数学运算,并且由于求和仅以n给出,因此我不确定如何包含k。谁能向正确的方向推动我或帮助我更好地理解这一点?

谢谢!

2 个答案:

答案 0 :(得分:3)

tc应该为managed_disk_id = "${element(azurerm_managed_disk.tf-mdsk-cluster.*.id, count.index)}"

还请注意,使用O(N*k*(k-1)/2)的{​​{1}}解决方案有更好的解决方案:leetcode

答案 1 :(得分:1)

据我了解,您的问题是总结N + 2N + 3N + 4N + ... + (k - 1)N。等同于N*(1+2+3+...+(k-1)) = N*(k-1)*(k)/2

请注意,合并两个大小为N的数组需要进行2*N比较(而不是N)。因此正确的序列应为:2N + 3N + ... + KN

S   = 2N + 3N + ... + KN
S+N = 1N + 2N + 3N + ... + KN
S+N = N (1+2+3+...+K)
S+N = N*K*(K+1)/2
S   = N*K*(K+1)/2 - N = O(N.K^2)

PS:我们知道从1到x的数字之和为x*(x+1)/2