|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Дано: обрабатывается большой поток неких "цифровых сущностей", представленных неким набором параметров, среди которых, есть параметр Q (от "quality"). Нужно отбирать из потока и сохранять на диске "самые лучшие" из сущностей по параметру Q, так, чтобы сохранялось около 1/1000 от общего объёма "просеянного" потока. Каков тут может быть достаточно эффективный -- по соотношению "качество/затраты" -- алгоритм отбора? Заковыка в том, что точного решения задача не имеет, ибо в процессе работы мы не можем определить, попадает ли то или иное Q в 1/1000 от всей выборки. Также не желательно решение, предполагающее накопление (по ходу работы) всех числовых значений самого Q. Хотя бы потому, что оно является тривиальным. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 02:31 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
пример бы строки привели хоть ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 05:50 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS Также не желательно решение, предполагающее накопление (по ходу работы) всех числовых значений самого Q. Хотя бы потому, что оно является тривиальным. а что с ними делать? как тривиальным, если среди них надо найти 1/1000 лучших? с каждой проверенной 1000 надо вынимать лучший и хранить ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 05:51 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS Заковыка в том, что точного решения задача не имеет, ибо в процессе работы мы не можем определить, попадает ли то или иное Q в 1/1000 от всей выборки. Также не желательно решение, предполагающее накопление (по ходу работы) всех числовых значений самого Q. Хотя бы потому, что оно является тривиальным. Ты можешь заранее оценить сколько всего сущностей есть в потоке? Тысяча? Десть тысяч? Миллион? Миллиард? Выделяешь себе в памяти массив в который влезет 1/1000 от потока и начинаешь оценивать поток. Сначала просто набиваешь все оцененные сущности в массив (предполагая что они "самые лучшие"), массив естественно сортированный от лучших к худшим. А как массив заполнился начинаешь выкидывать из него с конца списка те что не оправдали ожиданий и записывать в него новые. В итоге и получишь массив с самыми лучшими, ну и заодно узнаешь точное число сущностей в исходном потоке и сможешь откорректировать чему равняется 1/1000 от него. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 06:30 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
White Owl Ты можешь заранее оценить сколько всего сущностей есть в потоке? Тысяча? Десть тысяч? Миллион? White Owl Выделяешь себе в памяти массив в который влезет 1/1000 от потока и начинаешь оценивать поток Наверное, мне стоило сразу сказать, что речь идет о методе Монте-Карло, так что то, что часть "не самых плохих" сущностей потеряется -- не критично. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 09:16 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS White Owl Ты можешь заранее оценить сколько всего сущностей есть в потоке? Тысяча? Десть тысяч? Миллион? White Owl Выделяешь себе в памяти массив в который влезет 1/1000 от потока и начинаешь оценивать поток Сохраняй в БД. Суть алгоритма все-равно не меняется. SQLite отлично подойдет, управляя размером кэша ты будешь управлять тем какая часть данных останется в памяти. Если доступен второй проход по тому же потоку, то достаточно сохранить порядковый номер сущности. Первым проходом получишь номера лучших, вторым сами сущности. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 09:31 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS, выглядит как типичный кейс streaming аналитики. обычно строят из чего-то типа kafka+spark, flume и т.п. поток пишем в кафку, ответ с лучшими сущностями в ту же кафку в соседний топик. видимо сначала надо вычитать первый миллион сообщений, что бы определить кто там лучший в первом миллионе, после этого в реалтайме считать среднее и параллельно те что проходят фильтр писать в ответный топик кафки. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 09:32 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS Дано: обрабатывается большой поток неких "цифровых сущностей", представленных неким набором параметров, среди которых, есть параметр Q (от "quality"). Нужно отбирать из потока и сохранять на диске "самые лучшие" из сущностей по параметру Q, так, чтобы сохранялось около 1/1000 от общего объёма "просеянного" потока. На каждую тысячу событий вычисляй случайное число и бери из этой пачки элемент по номеру этого числа. Здесь еще надо-бы вспомнить про теорвер и доверительный интервал. Но мои знания уже протухли в этой части и поэтому пока я помню только термин. И кажется он посчитан для нормальных распределений. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 13:13 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS Каков тут может быть достаточно эффективный -- по соотношению "качество/затраты" -- алгоритм отбора? Любая сортированная структура размером в 1/1000 от размера потока. Для твоего миллиарда это будет всего миллион. Иван FXS Заковыка в том, что точного решения задача не имеет, ибо в процессе работы мы не можем определить, попадает ли то или иное Q в 1/1000 от всей выборки. А оно нам и не надо, мы просто отбираем Х лучших, откидывая неудачников с хвоста. В конце берём столько сколько нужно с головы списка. Иван FXS Также не желательно решение, предполагающее накопление (по ходу работы) всех числовых значений самого Q. Всех накапливать и не надо, только лучших. Точнее - только тех, кто попал в вилку между текущим худшим из лучших и текущим лучшим из лучших. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 13:59 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS White OwlТы можешь заранее оценить сколько всего сущностей есть в потоке? Тысяча? Десть тысяч? Миллион? https://ru.wikipedia.org/wiki/Двоичная_куча ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 14:29 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Любая сортированная структура размером в 1/1000 от размера потока. Иван FXS "цифровых сущностей", представленных неким набором параметров, среди которых, есть параметр Q ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 16:50 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
mayton вычисляй случайное число и бери из этой пачки элемент по номеру этого числа ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 16:55 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS mayton вычисляй случайное число и бери из этой пачки элемент по номеру этого числа Тогда извиняюсь. Я неправильно понял твою задачу. А как ты вообще собрался выбирать из потока по параметру Q когда ты не знаешь гистограмму Q в этом потоке? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 16:58 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Я размышляю над таким алгоритмом: имеем два параметра -- порог П и "шаг порога" Ш 1) если Q очередного экземпляра в потоке больше или равно П, то а) сбрасываем экземпляр на диск и б) изменяем порог П = П + 999*Ш; 2) если Q очередного экземпляра в потоке меньше П, то а) игнорируем экземпляр и б) изменяем порог П = П - Ш. Понятно, что П будет колебаться около некоторого равновесного уровня, только если на одно событие (1) будет приходиться 999 событий (2). Не понятно только, как выбрать Ш. И должен ли он быть постоянным в ходе работы алгоритма... (Упссс, знаки попутал, теперь правильно.) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 17:09 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS Я размышляю над таким алгоритмом: имеем два параметра -- порог П и "шаг порога" Ш 1) если Q очередного экземпляра в потоке больше или равно П, то а) сбрасываем экземпляр на диск и б) изменяем порог П = П + 999*Ш; 2) если Q очередного экземпляра в потоке меньше П, то а) игнорируем экземпляр и б) изменяем порог П = П - Ш. Х X + П + 999*Ш X + 2П + 2*999*Ш ... то взяв начальное П <= Х, ты просто накидаешь в файл млн. самых маленьких. Правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 17:24 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS Не понятно только, как выбрать Ш. И должен ли он быть постоянным в ходе работы алгоритма... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 17:25 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Имя пользователя1 Правильно ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 17:27 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS Имя пользователя1 Правильно ты вот по такому предложению не ответил. Можно или нет? Dima T Если доступен второй проход по тому же потоку, то достаточно сохранить порядковый номер сущности. Первым проходом получишь номера лучших, вторым сами сущности. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 17:58 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS 2) если Q очередного экземпляра в потоке меньше П, то а) игнорируем экземпляр и б) изменяем порог П = П - Ш. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 18:02 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Напоминает регулятор уровня записи в моём кассетном Technics. Порог быстро реагирует на уровнь но спадает медленно. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 18:10 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Имя пользователя1 ты вот по такому предложению не ответил. Можно или нет? ____________________ * -- типа, вот так https://www.sql.ru/forum/1335743/o-razvorachivanii-dlinnogo-celogo-v-nabor-iz-100-psevdosluchaynyh-deystvitelnyh ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 18:40 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS Так что я продолжаю обсуждать постановку задачи более общую (чем в моём проекте). Ну то есть - решение всё равно будет очень хреново работать на некоторых специальных видах перестановок, и почти наверняка не сможет собрать абсолютно все требуемые значения. Такие допуски приемлемы для "общего случая"? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 00:23 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Имя пользователя1, допуски приемлемы, только я так и не понял, как выбрать Ш. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 00:39 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS, можешь в Excel показать величину Q в виде графика? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 00:58 |
|
|
start [/forum/topic.php?fid=16&fpage=3&tid=1339663]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
others: | 243ms |
total: | 409ms |
0 / 0 |