LINUX.ORG.RU

Задачка размять мозг

 , ,


0

2

Доброй ночи. До толксов не дорос, посему напишу тут.

Пример (сферический в вакууме):

На сайте http://ваш_любимый_дистрибутив.com есть (на самом деле нету, но это не важно) счетчик общего количества скачиваний дистрибутива за неделю. За последние 7*24 часа вплоть до текущего времени. Т.е. если сейчас 01:21, то счетчик показывает количество скачиваний с 1 мая 01:21 (-7*24 часа) по 7 мая 01:21. Обновляется он, к примеру, каждые 10 минут (точный промежуток неизвестен). Т.е. через 10 минут (в 01:31 в данном случае) число в счетчике может стать как меньше, так и больше, в зависимости от количества скачиваний в прошлом, по сравнению с настоящим.

Ну так вот, как из этого безобразия можно вычислить количество скачиваний за сутки (за каждый день) и продолжить в дальнейшем каждый день вычислять это количество? Просто алгоритм на пальцах нужен. Что-то уже всю голову сломал. Направьте на путь истинный. Возможность парсить и собирать в бд показания этого счетчика каждые 10 минут есть.

Перемещено leave из general



Последнее исправление: leave (всего исправлений: 2)

Начать собирать данные в 00:00 через каждый час Зачем через 10 минут? За час собери и всё.

Или, если можно только через 10 минут (хотя как это? О_о) собрать данные за 6 циклов по 10 минут и суммировать. Не7

PunkoIvan ★★★★
()
Ответ на: комментарий от PunkoIvan

Не, если бы счетчик показывал данные всегда от 00:00 понедельника до текущего времени, то прокатило бы так. А он показывает количество от ровно за последние 7*24 (168) часов. Наблюдал за ним с 00:00 сегодня и он через 10 минут показал меньшее число, потом большее, потом опять меньшее, чем предыдущее.

artem_bowl
() автор топика
Ответ на: комментарий от artem_bowl

Ну начни данные собирать просто с текущего часа и всё.

Потому что _точное_ количество за _отдельно_ взятый день в прошлом получить не выйдет, кмк.

только среднее, и то, если знаешь, когда было первое скачивание.

PunkoIvan ★★★★
()
Ответ на: комментарий от PunkoIvan

И ты получишь разнцу между количеством скачиваний за поледние 10 минут и количеством скачиваний в первый 10 минут твоего «0».

tyakos ★★★
()
Ответ на: комментарий от PunkoIvan

А что считать? Допустим, 10.000 скачиваний в сутки ровно, стабильно. Если в 23:59 было за неделю 70.000 скачиваний, а к 12:00 никто не скачал, потому что сервер лежал, счетчик будет показывать 65000.

artem_bowl
() автор топика
Ответ на: комментарий от tyakos

Храним в переменной относительный 0. Парсим счётчик раз в час. Получаем кол-во скачиваний, обновляем относительный 0.

Пойду посплю, днём прочту еще раз...

PunkoIvan ★★★★
()
Ответ на: комментарий от tyakos

Может немного неясно описал - мне необязательно прямо сегодня получить это количество, я могу неделю подряд собирать данные со счетчика каждый час, чтобы через неделю уже видеть у себя данные за текущие сутки, обновляемые так же раз час. И это все вычислять при помощи собранных за прошлую неделю данных. Тоже нереально?

artem_bowl
() автор топика

На сайте http://ваш_любимый_дистрибутив.com есть (на самом деле нету, но это не важно)

Это официальная отмазка «а линукс здесь притом», я правильно понял?

головоломка, математика

Причем тут головоломки и математика, ты впариваешь нам какую-то дичь.

Что-то уже всю голову сломал. Направьте на путь истинный.

От чего? Если ты все равно эти данные собираешь, и тебе даже не известно точное время обновления счетчика, собирай данный с такой периодичностью, с какой тебе позволяют твои вм, и с какой они нужны. Хоть раз в секунду, параллельно. Без разницы. Данные от этого лучше не станут.

znenyegvkby
()
Ответ на: комментарий от artem_bowl

Невозможно. Подобный счетчик является интегратором, то есть фильтром нижних частот.

Но если ты узнаешь значение скачиваний за n часов то по значениям счетчика можно будет вычислить точное количество за любые последующие n часов.

Vovanano
()

Раз в сутки взял счетчик, поделил его на 7 и все. А то понапишут жирносайтов, что слов нет.

ss_ash ★★★
()
Ответ на: комментарий от ss_ash

Ну и что оно будет, если за текущие сутки скачали на сто тыщ больше, чем за предыдущие все? или наоборот ничего не скачали

artem_bowl
() автор топика
Ответ на: комментарий от artem_bowl

Я правильно понимаю, что хотите организовать «предсказание» количества скачиваний, т.е. на основе статистики спрогнозировать что будет происходить через неделю?

Если да, то:

  • данная задача из области статистики и теории вероятности (а может ещё и ИИ), а не математики (может там матожидание считать, а не среднее и вообще надо смотреть какое там распределение);
  • если нет никаких данных кроме этих, то обнаружить корреляцию не с чем и основываться придётся только на информации вида «а вот по пятницам обычно качают в среднем столько-то», и соответственно,
  • это будет примерно также правдиво как и прогнозы погоды (там и то надёжность больше, как мне кажется), т.к. количество скачиваний может зависеть от различных новостей или событий (таких как новый релиз и новость на LOR).

Но это если я с утра правильно понял о чём речь.

ronkajitsu
()
Ответ на: комментарий от artem_bowl

Вот ли не похрен? Ты ж все равно не узнаешь точные значения, так как используешь относительные.
Тогда r=t-6/7y где r - результат, y - вчерашнее показание, t - сегодняшнее. Если r<0 тогда r присвоить 0 или написать, что вчера скачали на |r| больше.

ss_ash ★★★
()

Да никак нельзя. Грубо говоря, если там по одному скачиванию в полдень каждый день, этот счётчик будет показывать ровно то же самое, как если бы там было семь скачиваний в полдень воскресенья.

Miguel ★★★★★
()

Точную статистику за конкретный день узнать не сможешь, потому что изменение значения счётчика за сутки показывает разницу между количеством скачиваний семь дней назад и за прошедший день.

Hasek ★★
()

Т.е. если сейчас 01:21, то счетчик показывает количество скачиваний с 1 мая 01:21 (-7*24 часа) по 7 мая 01:21.

на заметку, 7 - 1 = 6

по сабжу, никак

задача сводится к системе линейных уравнений с числом неизвестных на 7 * 24 * 60 / n большим, чем число уравнений; где n=10 минут - частота сбора данных

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

хотя вообще-то там все переменные неотрицательны; так что если удастся поймать момент когда за неделю скачиваний было 0, можно отсюда будет начать раскручивать цепочку

MyTrooName ★★★★★
()

Если наблюдения ведутся с того момента, когда скачиваний было 0, то задача тривиальна: после первой недели текущее значение счётчика равно значению счётчика 10 минут назад − число скачиваний за 10 минут (неделю − 10 минут) назад (а мы его уже знаем) + число скачиваний за последние 10 минут. Если нет — очень жаль, данных недостаточно.

Softwayer ★★
()

Окей, в общем, в день обычно примерно одинаковое количество скачиваний, бывают иногда взлеты, когда скачивания увеличиваются, так и проседания, когда мало качают — можно как-то вычислить приблизительное количество скачиваний на текущий момент, опираясь на среднее значение скачиваний в сутки в прошедшие дни? Как я понимаю, если скачиваний станет резко меньше, то и значение счетчика станет тут же меньше, а если заметно больше, то оно вырастет.

artem_bowl
() автор топика
Ответ на: комментарий от artem_bowl

К примеру, счетчик постоянно показывает ~700 плюс-минус скачиваний. Что означает, что в среднем в день скачиваний ~100. Можно как-то начать плясать от этого?

artem_bowl
() автор топика
Ответ на: комментарий от artem_bowl

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

artem_bowl
() автор топика
Ответ на: комментарий от artem_bowl

Можно как-то начать плясать от этого?

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

Vovanano
()

Точно решить врядли получится, статически — легко. Гугли EM admixture resolve и shepp vardi (там формула прям в абстракте).

ebantrop
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.