2014-04-28 2 views
2

Какой алгоритм мы можем использовать для поиска локальных максимумов в произвольно генерируемом массиве значений длиной 10?Найти локальные максимумы в последовательности значений

Моя текущая стратегия состоит в том, чтобы разбить массив на 3 и найти максимальный элемент каждого массива подмножества, но это не включает в себя все максимумы.

Line graph

В идеале, я хотел бы первый пункт также быть идентифицирован как локальный максимум, а третий красный слева не должны быть помечены как таковые.

+0

На самом деле я заполнения массива в группе из трех и найти самый большой из них. –

+0

Вы можете найти любые локальные максимумы в logn time. почему вы ищете первую и третью слева? –

ответ

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 вовсе не восхождение на холм, как правило, обнаруживает локальные максимумы, а специальные эвристики применяются, чтобы избежать остановки на локальном максимуме. Однако алгоритм не дает никаких гарантий относительно того, какой максимум будет найден. –

Смежные вопросы