|
Разделить количество бананов в упаковке по корзинам - buckets (SQL?)
|
|||
---|---|---|---|
#18+
Valergrad, Что хочет ТС достаточно понято - распределить по потокам так, чтоб обработка завершилась как можно быстрее. В идеальном виде это минимизация дисперсии с задействованием всех потоков. Как я писал выше - отличие от рюкзака в том, что нет жесткого лимита, есть критерий быть поближе к нему (не важно сверху или снизу). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 15:47 |
|
Разделить количество бананов в упаковке по корзинам - buckets (SQL?)
|
|||
---|---|---|---|
#18+
Valergrad, Ну и тут вообще нет понятия стоимость, и удельной стоимости. Странно почему уже третьему человеку мерещится рюкзак... видимо если надо что-то куда-то распределить - сразу рюкзак! PS. Учитывая контект задачи нет особой необходимости в поиске идеального решения, вполно должно удовлетворить "достаточно хорошее". В дополнение к уже озвученным можно еще предложить: сортируем упаковки по убыванию и добавляем в текущую корзину пока объем не превышает число бананов/число корзин. Для данных (1,2,3,10,100) или (8,7,3,2,2) отработает идеально. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 16:01 |
|
Разделить количество бананов в упаковке по корзинам - buckets (SQL?)
|
|||
---|---|---|---|
#18+
Кобанчегсортируем упаковки по убыванию и добавляем в текущую корзину еще не распределенную упаковку с максимальным весом пока объем не превышает число бананов/число корзин ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 16:04 |
|
Разделить количество бананов в упаковке по корзинам - buckets (SQL?)
|
|||
---|---|---|---|
#18+
КобанчегValergrad, Что хочет ТС достаточно понято - распределить по потокам так, чтоб обработка завершилась как можно быстрее. В идеальном виде это минимизация дисперсии с задействованием всех потоков. Как я писал выше - отличие от рюкзака в том, что нет жесткого лимита, есть критерий быть поближе к нему (не важно сверху или снизу). Если побыстрее - то количество потоков должно быть известно. Кроме того минимизируется не дисперсия, а самый длинный поток ( или иными словами - максимум среди корзин). Задача NP-полная, но разные способы перебора покажут разное время ( на разных кейсах). Но если задача пришла из практики - то математически точное решение здесь не нужно. Например простой жадный алгоритм: отсортить в порядке убывания и раскладывать очередную упаковку туда где отклонение от среднего будет минимально, даст неплохой результат в большинстве случаев. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 16:21 |
|
Разделить количество бананов в упаковке по корзинам - buckets (SQL?)
|
|||
---|---|---|---|
#18+
На днях решал аналогичную задачку: нужно было отпроцессить множество "корзин" с различным количеством "бананов" (не на Oracle). Скорость обработки корзины можно считать линейной по отношению к количеству бананов. Чтобы ускорить обработку, было решено в основном потоке отсортировать корзины по убыванию, а потом запустить N (N = количество ядер в системе, основная нагрузка при обработке ложится на CPU) параллельных потоков, где каждый поток pull-ит очередную корзину для обработки, пока они наконец не закончатся. Похоже на то, что описал выше Valergrad. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 17:02 |
|
|
start [/forum/topic.php?fid=52&msg=39829293&tid=1882366]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 146ms |
0 / 0 |