簡體   English   中英

算法的漸近時間復雜度O(log n)是多少?

[英]is the asymptotic time complexity of this algorithm O(log n)?

查找p的偽代碼算法為:

peakreturn(H)
for p=1 to m //m is the length of H
    if H[p-1] ≤ H[p] and H[p] ≥ H[p+1] then return p
return nil // only returns this if there is no peak

假設我有一個整數值H [1至m]的數組,其中,如果“ p”是峰值元素,則:

H[p] ≥ H[p+1] if p = 1,
H[p-1] ≤ A[p] ≥ H[p+1] if 1 < p < m,
H[p] ≥ H[p-1] if p = m.

基本上,如果H [p]大於或等於其相鄰元素,則為峰。

假設數組H在開頭和結尾處都增加了1個元素,數組為H [0至m + 1],其中H [0] = H [m + 1] =-無窮大。 因此,H [0]和H [m + 1]是標記。 如果H [p-1]≤H [p]≥H [p + 1],則元素p(其中1≤p≤n)為峰值。

我認為漸近時間復雜度為O(log n),但我不確定。 如果可以的話請幫助,非常感謝。

不,不是O(log m)。 例如,如果H在增加,則循環執行m次,因為唯一的峰值是最后一個元素。 因此,最壞的情況是O(m)。

O(log m)解決方案如下所示:要在數組中找到一個末端元素小於其鄰居的峰,請考慮數組的中間元素。 如果是高峰,則停止。 否則,如果它小於其左側的元素,請在陣列的左半部分找到一個峰。 如果它小於右邊的元素,請在陣列的右邊找到一個峰。 它必須小於一個,因為它不是峰值。 每次大約將數組的大小減半,並且保證終止,因為一旦數組達到3號,就保證中間元素為峰值,因為末端元素(根據構造)比它們的鄰居小-中間元素。

暫無
暫無

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

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