2011-12-21 48 views

回答

3

假設數組未被排序,這個問題是Omega(n),因爲您需要讀取所有元素[在未排序的數組中找到max是Omega(n)問題,並且這個問題不容易找到最大值]。所以,它沒有次線性的解決方案。

O(n) [線性]溶液,使用selection algorithm

1. find the log(n) biggest element. //or sqrt(n) biggest element... 
2. scan the array and return all elements bigger/equal it. 

(*)該僞代碼是不正確的,如果該數組包含易受騙,但在第二步驟中修整愚弄是相當容易的。

+0

感謝您的解釋阿米特。我無法理解這個「掃描數組並返回所有元素大小/等於它」。這裏的'它'是什麼意思? 如果我理解清楚 這個問題是否希望我返回數組中的所有元素,它們是> top log(n)或top sqt(n)? Emilio上面提到,他們希望我做的就是返回sqt [數組中最大的元素]。 – 2011-12-21 16:29:24

+0

'它'是在步驟(1)找到的元素。這個問題要求所有大於'log(n)/ sqrt(n)'的值,因爲它表示:「查找頂部日誌(n)或頂部sqt(n)值....」和**不是**: '找到頂部日誌(n)或頂部sqt(n)值'[要求值** s **而不是值] – amit 2011-12-21 16:59:35

+0

得到它阿米特。 非常感謝。 – 2011-12-21 21:05:04

6

對於非排序數組,複雜度是線性的,但可以通過觀察log(n)和sqrt(n)都是單調增長函數來提高性能,因此max(log(n)).. )也是log(max(n,...)),對於sqrt也是一樣的。

所以,只需找到max(n)(線性)並計算log和sqrt。

+0

當然我們假設正的非零整數。 – 2011-12-21 09:02:26

+0

@ edA-qamort-ora-y:true,但我對「費率」不感興趣,只是爲了找到一個峯值。 – 2011-12-21 09:03:47

+0

理解了這個問題。謝謝。 – 2011-12-21 16:23:55