07.03.2017, 20:56
|
Аспирант
|
|
Регистрация: 30.06.2014
Сообщений: 56
|
|
Работа с графиками функций
Вот есть у меня функция, она там себе поработала и записала результаты в массив:
arr = [1,2,3,4,4,5,6,5,5,1,2,3,5,4,6,2,1]
Не так уж и сложно найти наибольшее или наименьшее значение массива, и определить его амплитуду. Но у меня проблема иначе: нужно найти самую долгую волну из самыми большими значениями, которую создает массив.
Чтобы было легче представить, вот тот же массив в виде гистограммы:
Для начала, волна - это такая область значений, где есть область спадания и область роста. Если после области спадания начался рост - то это уже совсем вторая волна. На рисунке они обозначены красными линиями, пересекающими гистограмму.
Теперь длинна волны - это количество в ней значений.
Сила волны - сума всех значений, которая она содержит.
Нужно: найти самую долгую и самую сильную волну и возвратить координаты ее начала, конца и суммы элементов.
У меня была идея перебирать массив циклом и как то вот так искать все это, но это немного сложно в плане реализации. Нужно ли запоминать все волны и потом их сравнивать, есть способ попроще? Какой цикл лучше использовать? Поэтому прошу помощи у вас.
|
|
07.03.2017, 21:24
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
Сообщение от TimohaP
|
Нужно ли запоминать все волны и потом их сравнивать, есть способ попроще?
|
нужно запоминать только самую долгую волну, и самую сильную (для каждой запоминать начало и конец, а для самой сильной - ещё и силу).
обходить массив циклом for.
помнить текущее состояние ("подъем" или "спад"). Если на спаде вдруг оказалось, что a[i] > a[i-1], то началась новая волна. У текущей сравнить длину и силу с лидерами, если что - запомнить.
|
|
07.03.2017, 21:39
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
TimohaP,
вы уверены что волны 9, 5, 3 а не 9, 4, 4?
[[1,2,3,4,4,5,6,5,5],[1,2,3,5],[4,6,2,1]]
Последний раз редактировалось рони, 07.03.2017 в 22:13.
|
|
07.03.2017, 22:16
|
Аспирант
|
|
Регистрация: 30.06.2014
Сообщений: 56
|
|
Alexandroppolus,
окей, спасибо, я попробую так сделать.
рони,
а вот тут с точки зрения логики спорно, знаешь -_-
хотя да, по тому, как я описал алгоритм, ты все-таки прав
|
|
07.03.2017, 22:54
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
{"rez":[[1,2,3,4,4,5,6,5,5],[1,2,3,5],[4,6,2,1]],"maxSum":{"begin":0,"sum":35,"len":9},"maxLen":{"begin":0,"sum":35,"len":9}}
|
|
08.03.2017, 19:33
|
Кандидат Javascript-наук
|
|
Регистрация: 21.01.2017
Сообщений: 139
|
|
Сообщение от TimohaP
|
Если после области спадания начался рост - то это уже совсем вторая волна
|
Тогда волны были бы следующими:
Цитата:
|
0-7 рост
7-9 спад
9-13 рост
13-14 спад
14-15 рост
15-17 спад
|
А у вас на гистограмме непонятно что, и непонятно как с этим работать.
Или новая волна начинается только после резкого спада/роста? Тогда почему третья волна начинается не с 15, а с 14?
|
|
|
|