![](/img/trans.png)
[英]Fast algorithm to find the n1 th smallest number to n2 th smallest number in an array
[英]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.