簡體   English   中英

合並K個長度為N的排序數組

[英]Merge K sorted arrays of Length N

這是書中指出的問題:

假設給定K個排序數組,每個數組包含n個元素,並且您想將它們組合成一個kn個元素的單個數組。 您使用以下方法:首先合並第一個和第二個數組,然后將結果數組與第三個數組合並,然后將結果與第四個數組合並,依此類推,直到合並第k個和最后一個輸入數組。 忽略常數因子和低階項,此連續合並算法所花費的運行時間為kn的函數。

我知道在合並第一個和第二個數組時,我最多將有N個比較,然后與第三個數組進行結果比較,我最多將有2N個比較,然后與我最多有的第四個數組合並3N比較等等。

結果是對

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

但是,我不太確定從這里出發。 我嘗試過在線查找,但是他們只是給出算術求和公式,但是我不太了解它的數學運算,並且由於求和僅以n給出,因此我不確定如何包含k。 任何人都可以將我推向正確的方向或幫助我更好地理解這一點?

謝謝!

tc應該是O(N*k*(k-1)/2)

另請注意,使用heap O(k*n*lgk)解決方案有一個更好的解決方案: leetcode

據我了解,您的問題是求和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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM