Задать вопрос

Как эффективно находить макс. значение постоянно растущей величины?

Целочисленная величина постоянно растёт в результате активности пользователей соц.сети. Есть API, через который только можно узнать, есть ли уже значение X или нет? Хочется узнавать в любой момент, какое значение сейчас самое большое из созданных, выполнив минимум запросов к API (предположим, запросы платные).

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

Совсем грубый вариант без модели – двоичный поиск в диапазоне от последнего найденного значения (нижняя граница) на некую большую величину (эмпирическую) вверх.

Вопрос: как правильно выполнять поиск методом научного тыка, если построить-таки модель, вписывающуюся в исторические данные, чтобы минизировать число тыков?

Т.е. из модели получается гипотеза, что на данный момент времени значение достигнет величины H. Можно её проверить: она либо есть, либо её ещё нет. На какой шаг теперь отступить от H, чтобы сделать следующую проверку?
  • Вопрос задан
  • 218 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Limbend
Какой то расплывчатый у вас вопрос получился, от чего сказанное мной возможно вам и так понятно.

Если есть некий сплайн по старым результатам, то почему бы не отталкиваясь от него, получить некое число N.
Далее проверить, достигнуто ли N+M и N-M.
Соответственно выяснив находится ли искомое значение в отрезке [N+M; N-M].

M - заранее рассчитать от степени разброса значений от сплайна и вашей требуемой точности.
Если M получится слишком большим и точность вас не устроит, то проделывать такое придется несколько раз.
Если M получится меньше разброса, то придется делать больше проверок (т.е. запросов)

Если удалось спрогнозировать только некий сплайн, без каких либо паттернов, то это единственный вариант.

При таком подходе вычислять точное число - все же затратно...

P.S. Не стоит проверять само число N (вы его назвали H) так как разброс все равно будет. Брать нужно достаточно широкий отрезок, проверять его края, и далее его резать по полам (Т.е. алгоритм логарифмического поиска).
Ответ написан
begemot_sun
@begemot_sun
Программист в душе.
Гугл: Аппроксимация.
Экстраполяция.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы