Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.16.66.206] |
|
Сообщ.
#1
,
|
|
|
Привет честной кампании!
Помогите найти простой (желательно) но эффективный алгоритм поиска пиков в массиве дискретных данных (с умеренными шумами). Или подскажите с чего начать. Заранее благодарен! |
Сообщ.
#2
,
|
|
|
пусть массив данных есть a[N-1], N - число элементов массива
если у шумов нет какой-то закономерности, дающей допинформацию о местонахождении пиков, то для поиска глобального максимума заведи переменную max положи max = a[0] (первый элемент массива) сравнивай каждый последующий элемент с предыдущим, если он (послед) больше, то делай max = послед, если нет - иди дальше; так до последнего элемента. for (int i=0; i<N-1; i++) { if (a[i] < a[i+1]) max = a[i+1]; } если же нужны и локальные максимумы, то надо отслеживать и убывания, то есть ситуации, когда a[i-1] < a[i] и a[i] > a[i+1] также надо определиться, считать ли пиком промежутки типа 1 2 3 4 4 4 4 3 2 1, то есть будет ли каждый элемент, равный четырем, пиком. Если у тебя не многомиллиардный массив, то это будет быстро работать, так как на каждом шаге цикла 1 сравнение и, возможно, 1 присваивание в глобальном случае; 2 сравнения в локальном, присваивания - в зависимости от постановки задачи. |
Сообщ.
#3
,
|
|
|
можно найти все максимумы
максмум считается еслм слева отнего воразтание а справа убывание а что читать шумом счтитай сам |