|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS Dima T Только хранить миллион самых лучших на текущий момент Как уже написали 0,1% от бесконечности - бесконечность. В такой постановке задача не решаема. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 16:19 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS критерий, на основании которого будет приниматься решение о том, что очередную сущность в потоке не следует сохранять 1) из первой тысячи ничего не сохраняю на диск, но выясняю (и запоминаю) Max(Q), и его устанавливаю в качестве порога сохранения П(2) для обработки второй тысячи; 2) из второй тысячи сохраняю на диск всё, что лучше П(2), и начинаю заполнять двоичную кучу -- так, чтобы к концу второй тысячи в этой куче было два элемента; то есть по итогу обработки двух тысяч в куче два значения Q, и минимальный из которых будет порогом П(3) для обработки третьей тысячи; 3) из третьей .................. лучше П(3) ......... к концу третьей тысячи в этой куче было три элемента; и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 16:20 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS Иван FXS критерий, на основании которого будет приниматься решение о том, что очередную сущность в потоке не следует сохранять 1) из первой тысячи ничего не сохраняю на диск, но выясняю (и запоминаю) Max(Q), и его устанавливаю в качестве порога сохранения П(2) для обработки второй тысячи; 2) из второй тысячи сохраняю на диск всё, что лучше П(2), и начинаю заполнять двоичную кучу -- так, чтобы к концу второй тысячи в этой куче было два элемента; то есть по итогу обработки двух тысяч в куче два значения Q, и минимальный из которых будет порогом П(3) для обработки третьей тысячи; 3) из третьей .................. лучше П(3) ......... к концу третьей тысячи в этой куче было три элемента; и т.д. Таким образом ты, во первых, потеряешь "лучшие" из первой тысячи если они там были. Во вторых, если в каждой очередной тысяче будут две сущности достойные быть в списке самых лучших, ты запомнишь только одну из них. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 16:24 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Dima T Как уже написали 0,1% от бесконечности - бесконечность ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 16:25 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
White Owl Бред какой-то White Owl если в каждой очередной тысяче будут две сущности достойные быть в списке самых лучших, ты запомнишь только одну из них По итогу обработки любых N тысяч в куче будут находиться N максимальных значений из всех этих N тысяч. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 16:29 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS 1) из первой тысячи ничего не сохраняю на диск, но выясняю (и запоминаю) Max(Q), и его устанавливаю в качестве порога сохранения П(2) для обработки второй тысячи; Если Max(Q) окажется абсолютным максимумом, то в итого будет пустой список. ИМХО не существует алгоритма как в один проход отсечь заданное количество максимальных элементов, при этом не сохраняя лишних. Какая-то избыточность должна быть, чтобы в конце выкинуть лишнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 16:30 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS Dima T Как уже написали 0,1% от бесконечности - бесконечность Зато ты можешь выбрать тысячу или миллион лучших, безотносительно к объему потока. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 16:31 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Dima T Если Max(Q) окажется абсолютным максимумом, то в итого будет пустой список. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 16:32 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
White Owl Тогда ты не можешь, в принципе не можешь сказать что хочешь 1/1000 от потока. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 16:33 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS White Owl Бред какой-то 22321305 Боишься что все "сущности" не влезут в память - сбрасывай их на диск. Лень возится с ручным позиционированием на диске - сбрасывай их в БД. Все. Задача элементарная же. А еще можно вообще весь поток скидывать в БД и потом из него: select * from t limit @entity_count/1000 order by Q desc ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 16:40 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS White Owl Тогда ты не можешь, в принципе не можешь сказать что хочешь 1/1000 от потока. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 16:44 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
White Owl, текст 22321305 , ссылку на который вы дали, не содержит ответа на заданный вопрос " сформулировать критерий, на основании которого будет приниматься решение о том, что очередную сущность в потоке не следует сохранять на диск" увы. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 16:50 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Вариант top 1000 скользящих максимальных из бесконечного потока подходит? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 17:01 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS неужели я так путанно излагаю??? Да. Иван FXS Q(k) оказалось равно 1.23456 ... сохранять её на диск или проигнорировать? Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 17:14 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS White Owl, текст 22321305 , ссылку на который вы дали, не содержит ответа на заданный вопрос " сформулировать критерий, на основании которого будет приниматься решение о том, что очередную сущность в потоке не следует сохранять на диск" увы. Алгоритм не предполагает решать что "очередную сущность не следует сохранять на диск". Он предполагает решать что "очередную сущность следует сохранить". А все остальные соответственно не будут сохранены, но конкретно решения что "это не нужно" - нету в явном виде. Потому что есть решение "это нужно". Ты начал решать задачу задом наперед. Тебе с самого начала нужно сохранить лучшие, но ты уперся в поиск худших. И пытаешься изобрести отсев этих худших, вместо того чтобы делать выборку лучших (как требовалось изначально). Да алгоритмы на отсеивать и на выбирать часто взаимозаменяемы. Но в твоей задаче надо именно выбирать. Отсев не годится для нахождения "лучших" в потоке. Был бы у тебя жесткий критерий "этот элемент хороший, а этот нет" - можно было бы и выбраковку делать, но у тебя этого критерия нет. Так что только накопительный выбор. Ну или как я уже говорил - загони весь поток в БД. Тогда у тебя уже будет конечный массив, на основе которого ты сможешь и простую сортировку сделать, и медиану посчитать, и девиации проверить, и вообще все что угодно. Любая статистика станет доступной. А если поток бесконечный - то только выборка по принципу "этот элемент входит в список лучших? если да, запомним его и выкинем самый худший из накопленных лучших". ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 17:33 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Которые я, впрочем, готов принять: и "-1" (в "countOfBest - 1"), позволяющее сохранять сущности уже из первой тысячи, и подстройка порога непрерывная, а не после каждой обработанной тысячи. Главное: что куча растет по мере роста runningCounter, составляя 1/1000 него, схвачено одинаково. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 18:15 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
mayton Вариант top 1000 скользящих максимальных ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 18:19 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 18:33 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS mayton Вариант top 1000 скользящих максимальных Хорошо. Top N скользящих максимальных из бесконечного потока сущностей. Я просто пытаюсь адаптировать вашу формулировку к более формальной. Можно без скользящих. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 18:41 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
mayton, посмотрите код, предложенный Дмитрием Сибиряковым в 22323204 -- на мой взгляд, он решает задачу для обозримых объемов обрабатываемого потока. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 18:54 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS на мой взгляд, он решает задачу для обозримых объемов обрабатываемого потока. Так себе у тебя взгляд, но раз ты сказал, что некоторые лучшие (в данном случае до 99,9%) можно терять, то и такой алгоритм сойдёт. Если сумеешь его правильно написать. И да, об этом коде тебе твердят ещё с первой страницы. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 19:00 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov И да, об этом коде тебе твердят ещё с первой страницы. То есть вот даже "размером в 1/1000 от размера потока" можно теперь интерпретировать как "runningCounter / 1000"... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 19:16 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван FXS То есть вот даже "размером в 1/1000 от размера потока" можно теперь интерпретировать как "runningCounter / 1000"... Это поток. Повторяй: "поток", "поток", "поток". Как ещё можно интерпретировать его размер? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2021, 22:02 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Иван, Вы можете написать алгоритм чтобы не 0.1% сливок снимать, а с хорошей точностью отделять верхние 50% от нижних? Просто поделить поток на два похожего размера, и чтобы один был заметно лучше другого. Или на три: получше, похуже и посередине. Если умеете, примените метод которым обогащали уран в 50х, очень похоже. Берете лучший из двух, и снова делите. Десять раз повторите - приблизитесь к 0.1% ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2021, 03:22 |
|
Как отбирать из потока 1/1000 лучших экземпляров?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Dima T если Max(Q) окажется абсолютным максимумом, то в итого будет пустой список В самом деле, если первый элемент кучи, появившийся в ней в процессе обработке первой тысячи сущностей, окажется достаточно большим, то для всех сущностей из второй тысячи может сработать Код: sql 1. 2.
и по итогу второй тысячи "куча лучших" просто не увеличится до двух элементов (как должна по смыслу). ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2021, 07:40 |
|
|
start [/forum/topic.php?fid=16&msg=40070830&tid=1339663]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
79ms |
get tp. blocked users: |
2ms |
others: | 247ms |
total: | 436ms |
0 / 0 |