powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как отбирать из потока 1/1000 лучших экземпляров?
25 сообщений из 151, страница 1 из 7
Как отбирать из потока 1/1000 лучших экземпляров?
    #40069820
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано: обрабатывается большой поток неких "цифровых сущностей", представленных неким набором параметров, среди которых, есть параметр Q (от "quality").

Нужно отбирать из потока и сохранять на диске "самые лучшие" из сущностей по параметру Q, так, чтобы сохранялось около 1/1000 от общего объёма "просеянного" потока.

Каков тут может быть достаточно эффективный -- по соотношению "качество/затраты" -- алгоритм отбора?

Заковыка в том, что точного решения задача не имеет, ибо в процессе работы мы не можем определить, попадает ли то или иное Q в 1/1000 от всей выборки.

Также не желательно решение, предполагающее накопление (по ходу работы) всех числовых значений самого Q. Хотя бы потому, что оно является тривиальным.
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40069827
пример бы строки привели хоть
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40069828
Иван FXS
Также не желательно решение, предполагающее накопление (по ходу работы) всех числовых значений самого Q. Хотя бы потому, что оно является тривиальным.

а что с ними делать?
как тривиальным, если среди них надо найти 1/1000 лучших?
с каждой проверенной 1000 надо вынимать лучший и хранить
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40069831
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
Заковыка в том, что точного решения задача не имеет, ибо в процессе работы мы не можем определить, попадает ли то или иное Q в 1/1000 от всей выборки.

Также не желательно решение, предполагающее накопление (по ходу работы) всех числовых значений самого Q. Хотя бы потому, что оно является тривиальным.
Так а все накапливать и не надо.
Ты можешь заранее оценить сколько всего сущностей есть в потоке? Тысяча? Десть тысяч? Миллион? Миллиард?
Выделяешь себе в памяти массив в который влезет 1/1000 от потока и начинаешь оценивать поток. Сначала просто набиваешь все оцененные сущности в массив (предполагая что они "самые лучшие"), массив естественно сортированный от лучших к худшим. А как массив заполнился начинаешь выкидывать из него с конца списка те что не оправдали ожиданий и записывать в него новые.
В итоге и получишь массив с самыми лучшими, ну и заодно узнаешь точное число сущностей в исходном потоке и сможешь откорректировать чему равняется 1/1000 от него.
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40069858
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Ты можешь заранее оценить сколько всего сущностей есть в потоке? Тысяча? Десть тысяч? Миллион?
миллиард

White Owl
Выделяешь себе в памяти массив в который влезет 1/1000 от потока и начинаешь оценивать поток
каждая сущность "большая", много больше, чем числовой параметр Q сам по себе, так что хранить их в памяти нельзя, можно только по очереди каждую оценивать и решать, сбрасывать её на диск или нет.

Наверное, мне стоило сразу сказать, что речь идет о методе Монте-Карло, так что то, что часть "не самых плохих" сущностей потеряется -- не критично.
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40069864
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
White Owl
Ты можешь заранее оценить сколько всего сущностей есть в потоке? Тысяча? Десть тысяч? Миллион?
миллиард

White Owl
Выделяешь себе в памяти массив в который влезет 1/1000 от потока и начинаешь оценивать поток
каждая сущность "большая", много больше, чем числовой параметр Q сам по себе, так что хранить их в памяти нельзя, можно только по очереди каждую оценивать и решать, сбрасывать её на диск или нет.

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

Если доступен второй проход по тому же потоку, то достаточно сохранить порядковый номер сущности. Первым проходом получишь номера лучших, вторым сами сущности.
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40069865
H5N1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS,

выглядит как типичный кейс streaming аналитики. обычно строят из чего-то типа kafka+spark, flume и т.п.
поток пишем в кафку, ответ с лучшими сущностями в ту же кафку в соседний топик. видимо сначала надо вычитать первый миллион сообщений, что бы определить кто там лучший в первом миллионе, после этого в реалтайме считать среднее и параллельно те что проходят фильтр писать в ответный топик кафки.
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40069962
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
Дано: обрабатывается большой поток неких "цифровых сущностей", представленных неким набором параметров, среди которых, есть параметр Q (от "quality").

Нужно отбирать из потока и сохранять на диске "самые лучшие" из сущностей по параметру Q, так, чтобы сохранялось около 1/1000 от общего объёма "просеянного" потока.

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

Здесь еще надо-бы вспомнить про теорвер и доверительный интервал. Но мои знания уже протухли в этой части
и поэтому пока я помню только термин. И кажется он посчитан для нормальных распределений.
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40069975
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
Каков тут может быть достаточно эффективный -- по соотношению "качество/затраты" -- алгоритм отбора?

Любая сортированная структура размером в 1/1000 от размера потока. Для твоего миллиарда это будет всего миллион.

Иван FXS
Заковыка в том, что точного решения задача не имеет, ибо в процессе работы мы не можем определить, попадает ли то или иное Q в 1/1000 от всей выборки.

А оно нам и не надо, мы просто отбираем Х лучших, откидывая неудачников с хвоста. В конце берём столько сколько нужно с головы списка.

Иван FXS
Также не желательно решение, предполагающее накопление (по ходу работы) всех числовых значений самого Q.

Всех накапливать и не надо, только лучших. Точнее - только тех, кто попал в вилку между текущим худшим из лучших и текущим лучшим из лучших.
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40069991
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
White OwlТы можешь заранее оценить сколько всего сущностей есть в потоке? Тысяча? Десть тысяч? Миллион?
миллиардиспользовать heap
https://ru.wikipedia.org/wiki/Двоичная_куча
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40070059
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Любая сортированная структура размером в 1/1000 от размера потока.
- надеюсь, что вы прочитали словосочетание "набором параметров" в
Иван FXS
"цифровых сущностей", представленных неким набором параметров, среди которых, есть параметр Q
-- каждая из "цифровых сущностей" многократно больше числа Q. Так что хранить в памяти 1/1000 от потока -- понятное решение, но несколько прямолинейное.
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40070063
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
вычисляй случайное число и бери из этой пачки элемент по номеру этого числа
каким образом случайно выбранный экземпляр окажется одним из лучших (по параметру Q)?
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40070065
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
mayton
вычисляй случайное число и бери из этой пачки элемент по номеру этого числа
каким образом случайно выбранный экземпляр окажется одним из лучших (по параметру Q)?

Тогда извиняюсь. Я неправильно понял твою задачу. А как ты вообще собрался выбирать из потока
по параметру Q когда ты не знаешь гистограмму Q в этом потоке?
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40070069
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я размышляю над таким алгоритмом: имеем два параметра -- порог П и "шаг порога" Ш

1) если Q очередного экземпляра в потоке больше или равно П, то а) сбрасываем экземпляр на диск и б) изменяем порог

П = П + 999*Ш;

2) если Q очередного экземпляра в потоке меньше П, то а) игнорируем экземпляр и б) изменяем порог

П = П - Ш.

Понятно, что П будет колебаться около некоторого равновесного уровня, только если на одно событие (1) будет приходиться 999 событий (2). Не понятно только, как выбрать Ш. И должен ли он быть постоянным в ходе работы алгоритма...

(Упссс, знаки попутал, теперь правильно.)
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40070080
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
Я размышляю над таким алгоритмом: имеем два параметра -- порог П и "шаг порога" Ш

1) если Q очередного экземпляра в потоке больше или равно П, то а) сбрасываем экземпляр на диск и б) изменяем порог

П = П + 999*Ш;

2) если Q очередного экземпляра в потоке меньше П, то а) игнорируем экземпляр и б) изменяем порог

П = П - Ш.
ну то есть если в потоке будут такие значения:
Х
X + П + 999*Ш
X + 2П + 2*999*Ш
...

то взяв начальное П <= Х, ты просто накидаешь в файл млн. самых маленьких. Правильно?
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40070081
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
Не понятно только, как выбрать Ш. И должен ли он быть постоянным в ходе работы алгоритма...
наверное, полезна будет какая-то зависимость Ш от текущих значений (Q-П), потому что если всё время Ш много меньше, чем Abs(Q-П), то производимая коррекция порога мало влияет на его работу...
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40070082
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
Правильно
наверное, правильно, но это -- линейно растущие Q в потоке -- какой-то вычурный пример.
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40070093
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
Имя пользователя1
Правильно
наверное, правильно, но это -- линейно растущие Q в потоке -- какой-то вычурный пример.
не обязательно делать линейно, или вообще монотонно растущую последовательность, можно нашпиговать промежуточными числами. Суть в том, что до самых жырных поинтов (всех или некоторых) можем вообще не добраться.

ты вот по такому предложению не ответил. Можно или нет?
Dima T
Если доступен второй проход по тому же потоку, то достаточно сохранить порядковый номер сущности. Первым проходом получишь номера лучших, вторым сами сущности.
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40070095
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
2) если Q очередного экземпляра в потоке меньше П, то а) игнорируем экземпляр и б) изменяем порог

П = П - Ш.
тоже, кстати, хрень: можем сначала добавить несколько хороших значений, задрав П "совсем высоко", так ничего и не добавив в далее.
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40070097
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напоминает регулятор уровня записи в моём кассетном Technics. Порог быстро реагирует на уровнь но спадает
медленно.
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40070103
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
ты вот по такому предложению не ответил. Можно или нет?
конкретно в моем проекте (в нынешнем его состоянии) в самом деле можно не только "второй проход по тому же потоку" сделать, но и любой экземпляр в потоке отдельно воспроизвести повторно по его "ключу"(*). Так что я продолжаю обсуждать постановку задачи более общую (чем в моём проекте).

____________________
* -- типа, вот так https://www.sql.ru/forum/1335743/o-razvorachivanii-dlinnogo-celogo-v-nabor-iz-100-psevdosluchaynyh-deystvitelnyh
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40070174
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
Так что я продолжаю обсуждать постановку задачи более общую (чем в моём проекте).
для относительно рандомной, без явных перекосов, перестановки вполне можно добиться, чтобы получилось собрать "подавляющее большинство из 0.1% самых вкусных элементов" - на первых этапах определиться с пороговым значением, примерно по твоей схеме "П + 999*Ш" или около того.

Ну то есть - решение всё равно будет очень хреново работать на некоторых специальных видах перестановок, и почти наверняка не сможет собрать абсолютно все требуемые значения. Такие допуски приемлемы для "общего случая"?
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40070176
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1, допуски приемлемы, только я так и не понял, как выбрать Ш.
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40070179
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS, можешь в Excel показать величину Q в виде графика?
...
Рейтинг: 0 / 0
Как отбирать из потока 1/1000 лучших экземпляров?
    #40070194
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, в виде графика ... у которого что отложено по осям X и Y? И как построен набор отображаемых (в виде точек) элементов -- график всех значений Q, типа, всего "миллиарда"?
...
Рейтинг: 0 / 0
25 сообщений из 151, страница 1 из 7
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как отбирать из потока 1/1000 лучших экземпляров?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]