|
Разбить 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 |
|
|
start [/forum/topic.php?fid=59&fpage=26&tid=2121226]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
75ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 197ms |
0 / 0 |