簡體   English   中英

兩個排序數組並找到第 k 個最小的數字

[英]two sorted array and find k'th smallest number

兩個排序數組A, B ,長度為n,m (n <= m)k ,其中(k >= log n)已給出。

使用log (nm)我們可以在這兩個數組的聯合中找到k-th最小的數字。

我在這里的問題 2 中有一個解決方案,但我的挑戰是為什么兩個給定條件“(n <= m)”和“k >= log n”不影響該算法?

  • 第一個假設: n <= m是一個“不失一般性”的假設。 如果 n >= m,那么只需在頭腦中交換 A 和 B。 盡管不需要,但他們還是包含了這個假設,因為他們覺得做出這個假設是“自由的”。

  • 第二個假設:找到第k個最小元素的簡單算法是同時迭代 A 和 B,在具有兩者中較小元素的數組中前進。 這與從 mergesort 運行“Merge”function 完全一樣,但是在合並前 k 個元素后停止。 復雜度為 O(k)。 他們希望你找到一個更復雜的算法,所以他們通過聲明 k >= log(n) 來“排除”這個算法,這意味着復雜度 O(k) 永遠不會比 O(log(n)) 好。 從技術上講,如果他們想徹底排除這個算法,他們還應該聲明k <= n + m - log(n) ,否則你可以從最后運行“合並” function :合並 n+mk 個最大元素,然后返回第n+mk個最大的元素,與第k小的元素相同。

暫無
暫無

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

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