2014-04-28 100 views
2

我們可以使用什麼算法來找到隨機生成的長度爲10的值數組中的局部最大值?找到值序列中的局部最大值

我目前的策略是打破數組爲3,並找到每個子集數組的最大元素,但不包括所有的最大值。

Line graph

理想情況下,我想第一點也被確定爲局部最大值,並且左三紅不應該被標註。

+0

其實我填寫三個組的陣列,並找到其中最大的。 –

+0

您可以在logn時間內找到任何本地最大值。你爲什麼要找左邊的第一個和第三個? –

回答

7

只需遍歷所有索引並將該元素與任一側的兩個元素進行比較,跳過檢查它是否位於邊緣。

僞代碼:

for each index 
    if  (index == 0    or array[index-1] < array[index]) 
    and (index == array.length-1 or array[index+1] < array[index]) 
    { 
    store index 
    } 
+0

哥們你的答案是簡單化的人格化。非常感謝。 –

2

要查找本地最大值,通常可以使用hill climbing。此外,您可以通過應用simulated annealing來避免停在局部最大值而不是最大值之後。

+0

我將在現實生活中使用它,所以問題是它是否可以優化到那個水平? –

+0

這不僅僅是爲了找到全球最大值嗎?它通過達到本地最大值,然後在其他地方隨機重新啓動。 OP想要找到所有本地最大值。 – rafalio

+0

@rafalio不是所有爬山都傾向於找到局部最大值,並採用特殊的啓發式方法避免停在局部最大值處。然而,該算法不能保證將找到哪個最大值。 –

相關問題