Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.03.2017, 20:56
Аспирант
Отправить личное сообщение для TimohaP Посмотреть профиль Найти все сообщения от TimohaP
 
Регистрация: 30.06.2014
Сообщений: 56

Работа с графиками функций
Вот есть у меня функция, она там себе поработала и записала результаты в массив:
arr = [1,2,3,4,4,5,6,5,5,1,2,3,5,4,6,2,1]

Не так уж и сложно найти наибольшее или наименьшее значение массива, и определить его амплитуду. Но у меня проблема иначе: нужно найти самую долгую волну из самыми большими значениями, которую создает массив.
Чтобы было легче представить, вот тот же массив в виде гистограммы:

Для начала, волна - это такая область значений, где есть область спадания и область роста. Если после области спадания начался рост - то это уже совсем вторая волна. На рисунке они обозначены красными линиями, пересекающими гистограмму.
Теперь длинна волны - это количество в ней значений.
Сила волны - сума всех значений, которая она содержит.
Нужно: найти самую долгую и самую сильную волну и возвратить координаты ее начала, конца и суммы элементов.
У меня была идея перебирать массив циклом и как то вот так искать все это, но это немного сложно в плане реализации. Нужно ли запоминать все волны и потом их сравнивать, есть способ попроще? Какой цикл лучше использовать? Поэтому прошу помощи у вас.
Ответить с цитированием
  #2 (permalink)  
Старый 07.03.2017, 21:24
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Сообщение от TimohaP
Нужно ли запоминать все волны и потом их сравнивать, есть способ попроще?
нужно запоминать только самую долгую волну, и самую сильную (для каждой запоминать начало и конец, а для самой сильной - ещё и силу).
обходить массив циклом for.
помнить текущее состояние ("подъем" или "спад"). Если на спаде вдруг оказалось, что a[i] > a[i-1], то началась новая волна. У текущей сравнить длину и силу с лидерами, если что - запомнить.
Ответить с цитированием
  #3 (permalink)  
Старый 07.03.2017, 21:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

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.
Ответить с цитированием
  #4 (permalink)  
Старый 07.03.2017, 22:16
Аспирант
Отправить личное сообщение для TimohaP Посмотреть профиль Найти все сообщения от TimohaP
 
Регистрация: 30.06.2014
Сообщений: 56

Alexandroppolus,
окей, спасибо, я попробую так сделать.
рони,
а вот тут с точки зрения логики спорно, знаешь -_-
хотя да, по тому, как я описал алгоритм, ты все-таки прав
Ответить с цитированием
  #5 (permalink)  
Старый 07.03.2017, 22:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109


{"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}}
Ответить с цитированием
  #6 (permalink)  
Старый 08.03.2017, 13:43
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от TimohaP
На рисунке они обозначены красными линиями, пересекающими гистограмму.
что-то я не уверен, что у тебя тут три волны, а не две. На интервале от 10 до 17 отметка 14 - по мне так локальный минимум, а не третья волна

https://ru.wikipedia.org/wiki/Нормальное_распределение

https://ru.wikipedia.org/wiki/Фун...BD.D0.B8.D0.B9
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #7 (permalink)  
Старый 08.03.2017, 19:33
Кандидат Javascript-наук
Отправить личное сообщение для Diphenyl Oxalate Посмотреть профиль Найти все сообщения от Diphenyl Oxalate
 
Регистрация: 21.01.2017
Сообщений: 139

Сообщение от TimohaP Посмотреть сообщение
Если после области спадания начался рост - то это уже совсем вторая волна
Тогда волны были бы следующими:

Цитата:
0-7 рост
7-9 спад
9-13 рост
13-14 спад
14-15 рост
15-17 спад
А у вас на гистограмме непонятно что, и непонятно как с этим работать.

Или новая волна начинается только после резкого спада/роста? Тогда почему третья волна начинается не с 15, а с 14?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структурирование множества функций NO_ONE Общие вопросы Javascript 3 20.09.2016 23:38
Вакансия: Программист IOS, работа в офисе,г.Ростов-на-Дону Анна NikitaOnline Работа 0 21.03.2016 18:45
Постоянная работа / Front-end / Москва kooper Работа 4 29.09.2011 22:06