|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
Всем привет! Нужен алгоритм, который делит большой ArrayList на несколько мелких ArrayList так, чтобы полученные мелкие ArrayList были максимально равны по количеству элементов. Например: 100 / 5 = 20 + 20 + 20 + 20 + 20 101 / 5 = 20 + 20 + 20 + 20 + 21 13 / 4 = 3 + 3 + 3 + 4 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 13:28 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
MolasarВсем привет! Нужен алгоритм, который делит большой ArrayList на несколько мелких ArrayList так, чтобы полученные мелкие ArrayList были максимально равны по количеству элементов. Например: 100 / 5 = 20 + 20 + 20 + 20 + 20 101 / 5 = 20 + 20 + 20 + 20 + 21 13 / 4 = 3 + 3 + 3 + 4 100р на телефон и я напишу Вам эту лабораторку. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 14:02 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
MolasarВсем привет! Нужен алгоритм, который делит большой ArrayList на несколько мелких ArrayList На сколько частей? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 14:08 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
Если количество частей заранее не определено, то в цикле делить длину большого массива на переменное число частей и смотреть дробную часть от полученного значения. Если она близка к нулю или к единице, то найденное число делителя это подходящее значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 14:13 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
SQL2008Если количество частей заранее не определено, то в цикле делить длину большого массива на переменное число частей и смотреть дробную часть от полученного значения. Если она близка к нулю или к единице, то найденное число делителя это подходящее значение. Количество частей заранее неизвестно. А если не близко к 0 или 1, например: 13 / 5 = 2,6 Как получить оптимальный вариант: 3 + 3 + 3 + 2 + 2? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 14:24 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
Molasar... Количество частей заранее неизвестно. А если не близко к 0 или 1, например: 13 / 5 = 2,6 Как получить оптимальный вариант: 3 + 3 + 3 + 2 + 2? Обычный, самый тупой, алгоритм диззиринга из графики: 2 (trunc(2.6) ошибка 0.6) + 3 (trunc(2.6+0.6) ошибка 2.6+0.6-3=0.2) + 2 (ошибка 2.6+0.2-3=0.8) + 3 (ошибка 0.4) + 3 (ошибка 0) 2 + 3 + 2 + 3 + 3 IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 14:40 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
MolasarSQL2008Если количество частей заранее не определено, то в цикле делить длину большого массива на переменное число частей и смотреть дробную часть от полученного значения. Количество частей заранее неизвестно. А если не близко к 0 или 1, например: 13 / 5 = 2,6 Как получить оптимальный вариант: 3 + 3 + 3 + 2 + 2? Используйте алгоритм Брезенхема для прямой (из (0;0) в (N;K), где N — длина масива, K — кол-во частей) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 14:41 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
MolasarВсем привет! Нужен алгоритм, который делит большой ArrayList на несколько мелких ArrayList так, чтобы полученные мелкие ArrayList были максимально равны по количеству элементов. Например: 100 / 5 = 20 + 20 + 20 + 20 + 20 101 / 5 = 20 + 20 + 20 + 20 + 21 13 / 4 = 3 + 3 + 3 + 4 условия не очень понятны. почему 13/4 хуже чем 13/2(6+7) или 13/3(5+4+4)? Постановка задачи - загадчная. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 14:50 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
Самое загадочное - это ответ Т.к. ArrayList наиболее правильно бьется просто на 13-ть ArrayList'ов И тогда все получившиеся ArrayList'ы будут не просто максимально, а совершенно точно "равны по количеству элементов" ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 14:55 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevСамое загадочное - это ответ Т.к. ArrayList наиболее правильно бьется просто на 13-ть ArrayList'ов И тогда все получившиеся ArrayList'ы будут не просто максимально, а совершенно точно "равны по количеству элементов" наверняка неявно подразумевается что минимальное количество элементов в каждом из разбитых 2 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 15:03 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
llemingLeonid KudryavtsevСамое загадочное - это ответ Т.к. ArrayList наиболее правильно бьется просто на 13-ть ArrayList'ов И тогда все получившиеся ArrayList'ы будут не просто максимально, а совершенно точно "равны по количеству элементов" наверняка неявно подразумевается что минимальное количество элементов в каждом из разбитых 2 тогда почему бы все не бить на 2 или 2+1? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 15:08 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
Озвериннаверняка неявно подразумевается... я бы скорее подумал. что подразумевается кол-во частей sqrt( ArrayList.count ) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 15:18 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
ОзверинMolasarВсем привет! Нужен алгоритм, который делит большой ArrayList на несколько мелких ArrayList так, чтобы полученные мелкие ArrayList были максимально равны по количеству элементов. Например: 100 / 5 = 20 + 20 + 20 + 20 + 20 101 / 5 = 20 + 20 + 20 + 20 + 21 13 / 4 = 3 + 3 + 3 + 4 условия не очень понятны. почему 13/4 хуже чем 13/2(6+7) или 13/3(5+4+4)? Постановка задачи - загадчная. Изначально неизвестно на какое количество частей нужно делить ArrayList. Для простоты будем говорить про массив. Размер массива тоже неизвестен. 13/4 не хуже чем 13/2(6+7). Если делитель 4, то должно быть 3 + 3 + 3 + 4 или 4 + 3 + 3 + 3. Если делитель 2, то 6+7 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 15:29 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevСамое загадочное - это ответ Т.к. ArrayList наиболее правильно бьется просто на 13-ть ArrayList'ов И тогда все получившиеся ArrayList'ы будут не просто максимально, а совершенно точно "равны по количеству элементов" Приходит Object[N] его нужно обработать на K-потоках. Для этого необходимо, чтобы каждому потоку досталась максимально равная часть работы, т.е. часть массива. Вот поэтому и делим. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 15:55 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
Жесть. А про пул потоков не слышали? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 16:16 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
забыл никЖесть. А про пул потоков не слышали? Слышал и??? Как вы раздадите одну задачу на пул потоков???? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 16:23 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
Molasar, очевидно разобью на маленькие части. один элемент массива - одна задача ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 16:26 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
забыл никMolasar, очевидно разобью на маленькие части. один элемент массива - одна задача А если данные нужно сохранить в БД. Например, 100000 строк. Вы будете под запись каждой строки выделять поток? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 16:35 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
MolasarLeonid KudryavtsevСамое загадочное - это ответ Т.к. ArrayList наиболее правильно бьется просто на 13-ть ArrayList'ов И тогда все получившиеся ArrayList'ы будут не просто максимально, а совершенно точно "равны по количеству элементов" Приходит Object[N] его нужно обработать на K-потоках. Для этого необходимо, чтобы каждому потоку досталась максимально равная часть работы, т.е. часть массива. Вот поэтому и делим. наверное, это задача решается немного иначе. 1. Во-первых, вы должны исходить из некой пропускной способности. Допустим, 10 объектов в секунду. 2. Во-вторых, вы должны знать максимально эффективное кол-во потоков, которое имеет смысл пускать на сервере(если все измеряется потоками). Делается это через нагрузочное тестирование. 3. В-третьих, просто следить за пропускной способностью и добавлять потоки, когда требуется до n потоков. В общем случае, вам может подойти нечто вроде disruptor`а - этий кольцевой массив событий, который обрабатывает несколько консьюемров, причем могут сразу пачкой(если логика позволяет). ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 16:38 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
Molasarзабыл никMolasar, очевидно разобью на маленькие части. один элемент массива - одна задача А если данные нужно сохранить в БД. Например, 100000 строк. Вы будете под запись каждой строки выделять поток? так это вы все еще про запись в бд что ли? Не поборол? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 16:39 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
Molasarзабыл никMolasar, очевидно разобью на маленькие части. один элемент массива - одна задача А если данные нужно сохранить в БД. Например, 100000 строк. Вы будете под запись каждой строки выделять поток? Начинаешь задавать правильные вопросы. К тем пунктам что добавил Озверин, ты должен решить задачу написав функцию, которая принимает на вход int(число элементов в массиве) и вычисляет другой int(количество элементов в партитишене), учитывая коээфициенты - 1) количество потоков в системе 2) CPU или IO-bound таск. При CPU-bound коэффийиент должен быть строго 1, при IO - от 2-5 обычно, но надо мерять на реальной нагрузке 3) минимальное количество элементов на один таск, ибо если у тебя мало элементов, то нету особого смысла параллелить. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 16:47 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
Molasar....Вот поэтому и делим. просто циклично кидать в ArrayList'ы по одной штуке Был на входе набор элементов 1,2,3,4,5,6,7 нужно побить на 3-и массива, просто циклически в массивы и кидаете массив A: 1, 4, 7 массив B: 2, 5, не хватило массив C: 3, 6, не хватило в чем проблема - мне не понятно. Можно "размазать" 21909803 . Можно заранее посчитать, какая будет длина короткого массива truncate( length / threads_count ), сколько будет "перебравших +1" ( length % threads_count ), сколько будет "коротких" ( threads - length % threads_count). Если запросом, то опять таки: SELECT rownum mod threads_count as n, my_table.* FROM my_table Задача не стоящая выяденного яйца. IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 16:53 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevСамое загадочное - это ответ Т.к. ArrayList наиболее правильно бьется просто на 13-ть ArrayList'ов И тогда все получившиеся ArrayList'ы будут не просто максимально, а совершенно точно "равны по количеству элементов" 5 баллов! ИМХО просто шедеврально. И главное, укладывается в "условия задачи". Но можно пойти еще дальше. Зачем нам 13-ть ArrayList'ов, зачем память засирать. Лучше пусть будет 1. Таким, образом, мы пришли к выводу, что задачу решать вообще не имеет смысла. Можно считать ее решенной уже на этапе постановки. Зачем подниматься на 3-ий этаж и спускаться на первый, если по условиям задачи нужно быть на первом. Можно просто не подниматься. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 04:23 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
llemingLeonid KudryavtsevСамое загадочное - это ответ Т.к. ArrayList наиболее правильно бьется просто на 13-ть ArrayList'ов И тогда все получившиеся ArrayList'ы будут не просто максимально, а совершенно точно "равны по количеству элементов" наверняка неявно подразумевается что минимальное количество элементов в каждом из разбитых 2 Нельзя ли уточнить. А то так придешь к врачу, он тебе так неявно не то лекарство даст и неявно откинешься. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 04:24 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
офигенный пример того, почему на любой заданный вопрос нужно отвечать вопросом "объясни, зачем это нужно" ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 10:59 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
Код: java 1. 2. 3.
Тут - простой алгоритм. Целочисленного деления и остатка (%) достаточно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 11:53 |
|
Разбить ArrayList на максимально равные по количеству элементов части
|
|||
---|---|---|---|
#18+
Кажется мне, что все же использовать пул потоков будет правильнее. Разным потокам может быть выделено разное кол-во ресурсов и отработать они могут за разное время. Допустим надо будет вставить 10к записей в 5 потоков, дадим каждому потоку по 2к записей и запустим их одновременно. Первый поток выполниться за 1мин, второй за 3 мин, третий за 2мин, четвертый за 2,5 мин, а пятому не повезло, его все кругом ущемляют и он выполнился за 10 мин. Тогда получается, что 7-8 минут работал только один "ущербный" поток, а остальные потоки ему не помогали. Если бы мы раздробили данные на более мелкие порции (допустим по 200 записей), то более быстро освободившийся поток мог бы взять следующую небольшую порцию. Тогда они бы завершили свою работу все более или менее равномерно. Добавлю - это все ИХМО )))) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2019, 14:41 |
|
|
start [/forum/topic.php?all=1&fid=59&tid=2121226]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 169ms |
0 / 0 |