Алгоритм поиска наибольшего среднего арифметического некой последовательности - страница 5

 
Urain:

http://ru.wikipedia.org/wiki/%D0%A7%D0%B0%D1%81%D1%82%D0%BE%D1%82%D0%B0_%D0%9D%D0%B0%D0%B9%D0%BA%D0%B2%D0%B8%D1%81%D1%82%D0%B0 

А это тут причем?
 
Integer:
А это тут причем?
На прошлой странице.
 
ALXIMIKS:

Мужики, реально спасибо за энтузиазм,

но предлагаемый вами алгоритм в нужной мне вариации реализован и он медленный 

скорость алгоритма перебора КВАДРАТИЧНА а мне надо изменить его в что-то по проще - хотя бы в логарифмическую или О(n logn)

Более полная задача - это найти координаты всех точек (от n=20 до 2000)  

Грубо говоря и опираясь на пример с машками:

накладываем машки от 20 до 2000, выбираем 1500-й бар и двигаемся с самого верха вниз вдоль этого бара до первого пересичения с какой-то машкой,

вот эту точку и надо узнать (но их еще тысяча с лишним штук)

Потом выбираем новый бар, соседний, и опять двигаемся вниз. 

Это полная задача что надо, просто сразу не знал как сформулировать доступно.

 

Судя по результатам генираций с екселя -

можно попробовать найти среднее для более высоких значений n, а потом двигаться к меньшим n, увеличивая амплитуду "колибаний"  относительно прошлого результата уменьшать область поиска

но это на глаз все пока (( и не подойдет к маленьким n.

что-то я вообще запутался в задаче )

нужно же было вроде найти наибольшее максимальное среднее, полученное из n-го количества элементов,

среди всех возможных последовательностей длинной n-элементов, в массиве размером 2000 и более.

сейчас уже что-то другое все ищут? )

 
ALXIMIKS:

..... и двигаемся с самого верха вниз вдоль этого бара до первого пересичения с какой-то машкой,

А, ну так это будет не максимум, а Текущее значение любой МА. Тогда и массив надо строить многомерный...  
 
AndreiFAN:
А, ну так это будет не максимум, а Текущее значение любой МА.

не текущее - а максимальное из всех возможных ма (20, 30, 40, .... 2000) для данного бара.

 
ALXIMIKS:

не текущее - а максимальное из всех возможных ма (20, 30, 40, .... 2000) для данного бара.

размер последовательности, для которой производиться расчёт среднего, при поиске меняется?

ЗЫ: т.е. искали среднее для 20 потом для 30 и т.д.? пока не дойдёт до 2000?

 
ALXIMIKS:

не текущее - а максимальное из всех возможных ма (20, 30, 40, .... 2000) для данного бара.

Максимальное для бара, но Текущее для МА.

П,С. Вы строите какой-то Аллигатор, только не на 3х машках а на 200 ))) 

 
AndreiFAN:
Максимальное для бара, но Текущее для МА.

Да вы решили задачу, решили, и я давно еще днем ее решил,

проблема не в решении а в изминении самого принципа поиска решения 

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

Надо не придумать решение, оно готовое, только на ++( сейчас мне там проще писать)

Решение медленное, оно по скорости возрастание О(n^2) квадратическое 

Ищу альтернативу.

 

Задача не связанная с барами, бары дали визуализацию того что надо, просто сразу сам не придумал так обустроить вопрос. 

 

Urain 2014.09.08 22:05    RU

ЗЫ исходя из этой теоремы нельзя брать усреднение больше половины выборки, ошибки утверждения "быстрая машка всегда выше медленной" начинаются при превышении периода половины длинны выборки. 

при увеличении периода машки до половины длинны выборки утверждение  "экстремум быстрой машки всегда более выброшен чем у медленной" верно всегда.

Спасибо, это то что искал, увы понял только утром.

Все достаточно просто и логически.

Еще раз условие задачи (также спасибо за наглядность формулирования):

Есть 2000 баров, можем набросать машки от MA = 20 до  MA = 2000, надо найти самую высокую точку машки из всех возможных. 

Или тоже условие, но моим кривым языком:

Поиск наибольшего значения среди всех среднеарифметических значений от последовательностей, построенных из подряд лежащих элементов массива (muss [2000])

но длина последовательности должна быть не короче  n = 20 элементов.

 

Идея такова: при  n = 20, оригинальные значения машек будут строиться только в диапазоне [20....40), и любой результат для машки при n=40 можно получить из двух соседних значений расчитаныз при n=20,

так что уже не получить результат больше от того, что было посчитано на диапазоне [20....40).

Получается бессмысленно  2000 раз циклить и искать наибольшее среди всех средних, оно находится в диапазоне от [n...2*n), и циклить надо  только n раз.

 Сложность задачи переведена из квадратичной О(m^2), где m - длина массива (или баров) 2000 по условию.

переведена в линейную n*O(m), где n - коэффициент, наименьшая длина разрешенной последовательности (или наименьший размер машки).  

 

Оказывается вот что мне надо было -  получить весь набор оригинальных значений без огромного числа лишних данных. Всем спасибо. 

П.С. вот  эксель нагенерил где при n=20 наибольшее значение среди всех машек в раене 38:

 

Причина обращения: