 
			
				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,013
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от TimohaP
			
		
	 | 
 
	| 
		Нужно ли запоминать все волны и потом их сравнивать, есть способ попроще?
	 | 
 
	
 
 нужно запоминать только самую долгую волну, и самую сильную (для каждой запоминать начало и конец, а для самой сильной - ещё и силу). 
обходить массив циклом for. 
помнить текущее состояние ("подъем" или "спад"). Если на спаде вдруг оказалось, что a[i] > a[i-1], то началась новая волна. У текущей сравнить длину и силу с лидерами, если что - запомнить.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.03.2017, 21:39
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 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,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		  
{"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?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |