給定k個排序的整數數組,每個數組包含未知的正數元素(不一定是每個數組中的元素數相同),其中所有k個數組中的元素總數爲n,給出一個算法將k個數組合併成一個包含所有n個元素的有序數組。該算法的最壞情況時間複雜度應該是O(n∙log k)。使用二進制堆合併多個數組
4
A
回答
10
命名k-sorted列表1,...,k。
讓A
成爲組合排序數組的名稱。
對於每個列表,我彈出v
關閉i
並將(i, v)
分成最小堆。現在堆中將包含每對列表中最小條目的值對和列表ID。
雖然堆不是空的,但從堆中彈出(i, v)
並將v
附加到A
。 彈出下一個項目關閉列表i
(如果它不是空的)並將其放入堆中。
還有n
從堆中增加和刪除。 堆每個時間步最多包含k
個元素。 因此運行時間是O(n log k)
。
+2
沒有更多的補充。 – 2011-03-27 02:16:06
+1
偉大的解決方案!但是,每一步的堆積操作呢?我認爲時間複雜度將會是O(nk logk) – Hengameh 2015-06-03 11:26:27
0
也許只是不變的是,堆包含數組中未被清空的最小元素。當你嘗試從列表中彈出一個項目時,如果這個列表是空的,你繼續從堆中彈出元素。
相關問題
- 1. 多個二進制分類器合併
- 2. 合併二進制數據
- 3. 合併兩個完美的二進制堆?
- 4. 使用數組快捷方式形成二進制堆
- 5. 如何將數組編碼爲二進制並將二進制數據解組到二進制數組中?
- 6. 使用二進制搜索並行合併排序
- 7. 合併多個數組php
- 8. 二進制數據融合
- 9. C++實現二進制堆
- 10. 合併一個或多個數組,並使用替代順序
- 11. 使用數組將十進制轉換爲二進制
- 12. 如何計算兩個觀察二進制組合的數量?
- 13. 整數數組二進制數組
- 14. 二進制數組到base64
- 15. 二進制搜索,並使用SORTKEY兩個數組 - 非常詳細【JAVA]
- 16. Seaborn堆積的條形圖多個二進制變量
- 17. 二進制特徵的組合(向量)
- 18. 生成所有二進制組合C++
- 19. 創建二進制向量的組合
- 20. 合併複雜的二維數組合併爲一個
- 21. 通過多個二維數組並對它們進行排序
- 22. 二進制文件丟失使用svn合併
- 23. 使用cURL和多個數組合併到多維的PHP foreach
- 24. 如何在二維數組中使用二進制搜索?
- 25. 將二維數組合併到組中
- 26. 掙扎着用二進制數組:python
- 27. 二進制標誌的十六進制組合
- 28. 合併一個維數組的兩成二維數組的JavaScript
- 29. 如何使用imfreehand繪製多個二進制區域
- 30. 如何通過二進制數組執行一個二進制操作?
給定k個家庭作業任務,每個未知難度(不一定是不同),其中所有k個作業任務的總難度爲n,通常自己做家庭作業通常是有益的。 – quasiverse 2011-03-27 00:46:59
爲了保護OP,作業標籤由不同的用戶添加(可能是推測性的)。 – dsg 2011-03-27 01:00:53
啊..是的,好點...還是,它可以做作業... – quasiverse 2011-03-27 02:39:33