powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Разбить ArrayList на максимально равные по количеству элементов части
25 сообщений из 27, страница 1 из 2
Разбить ArrayList на максимально равные по количеству элементов части
    #39827202
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Нужен алгоритм, который делит большой ArrayList на несколько мелких ArrayList так, чтобы полученные мелкие ArrayList были максимально равны по количеству элементов.

Например:
100 / 5 = 20 + 20 + 20 + 20 + 20
101 / 5 = 20 + 20 + 20 + 20 + 21
13 / 4 = 3 + 3 + 3 + 4
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827223
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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р на телефон и я напишу Вам эту лабораторку.
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827225
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MolasarВсем привет!

Нужен алгоритм, который делит большой ArrayList на несколько мелких ArrayList
На сколько частей?
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827228
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если количество частей заранее не определено, то в цикле делить длину большого массива на переменное число частей и смотреть дробную часть от полученного значения.
Если она близка к нулю или к единице, то найденное число делителя это подходящее значение.
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827235
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008Если количество частей заранее не определено, то в цикле делить длину большого массива на переменное число частей и смотреть дробную часть от полученного значения.
Если она близка к нулю или к единице, то найденное число делителя это подходящее значение.
Количество частей заранее неизвестно.
А если не близко к 0 или 1, например:
13 / 5 = 2,6

Как получить оптимальный вариант: 3 + 3 + 3 + 2 + 2?
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827243
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827245
vsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vsl
Гость
MolasarSQL2008Если количество частей заранее не определено, то в цикле делить длину большого массива на переменное число частей и смотреть дробную часть от полученного значения.
Количество частей заранее неизвестно.
А если не близко к 0 или 1, например:
13 / 5 = 2,6

Как получить оптимальный вариант: 3 + 3 + 3 + 2 + 2?
Используйте алгоритм Брезенхема для прямой (из (0;0) в (N;K), где N — длина масива, K — кол-во частей)
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827252
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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)?

Постановка задачи - загадчная.
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827254
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое загадочное - это ответ
Т.к. ArrayList наиболее правильно бьется просто на 13-ть ArrayList'ов
И тогда все получившиеся ArrayList'ы будут не просто максимально, а совершенно точно "равны по количеству элементов"
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827265
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevСамое загадочное - это ответ
Т.к. ArrayList наиболее правильно бьется просто на 13-ть ArrayList'ов
И тогда все получившиеся ArrayList'ы будут не просто максимально, а совершенно точно "равны по количеству элементов"

наверняка неявно подразумевается что минимальное количество элементов в каждом из разбитых 2
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827270
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingLeonid KudryavtsevСамое загадочное - это ответ
Т.к. ArrayList наиболее правильно бьется просто на 13-ть ArrayList'ов
И тогда все получившиеся ArrayList'ы будут не просто максимально, а совершенно точно "равны по количеству элементов"

наверняка неявно подразумевается что минимальное количество элементов в каждом из разбитых 2
тогда почему бы все не бить на 2 или 2+1?
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827282
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озвериннаверняка неявно подразумевается...

я бы скорее подумал. что подразумевается кол-во частей sqrt( ArrayList.count )
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827289
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин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
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827304
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevСамое загадочное - это ответ
Т.к. ArrayList наиболее правильно бьется просто на 13-ть ArrayList'ов
И тогда все получившиеся ArrayList'ы будут не просто максимально, а совершенно точно "равны по количеству элементов"
Приходит Object[N] его нужно обработать на K-потоках. Для этого необходимо, чтобы каждому потоку досталась максимально равная часть работы, т.е. часть массива. Вот поэтому и делим.
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827328
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жесть. А про пул потоков не слышали?
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827333
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никЖесть. А про пул потоков не слышали?
Слышал и???
Как вы раздадите одну задачу на пул потоков????
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827335
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar, очевидно разобью на маленькие части. один элемент массива - одна задача
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827347
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никMolasar, очевидно разобью на маленькие части. один элемент массива - одна задача
А если данные нужно сохранить в БД. Например, 100000 строк.
Вы будете под запись каждой строки выделять поток?
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827348
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MolasarLeonid KudryavtsevСамое загадочное - это ответ
Т.к. ArrayList наиболее правильно бьется просто на 13-ть ArrayList'ов
И тогда все получившиеся ArrayList'ы будут не просто максимально, а совершенно точно "равны по количеству элементов"
Приходит Object[N] его нужно обработать на K-потоках. Для этого необходимо, чтобы каждому потоку досталась максимально равная часть работы, т.е. часть массива. Вот поэтому и делим.


наверное, это задача решается немного иначе.

1. Во-первых, вы должны исходить из некой пропускной способности. Допустим, 10 объектов в секунду.
2. Во-вторых, вы должны знать максимально эффективное кол-во потоков, которое имеет смысл пускать на сервере(если все измеряется потоками). Делается это через нагрузочное тестирование.
3. В-третьих, просто следить за пропускной способностью и добавлять потоки, когда требуется до n потоков.


В общем случае, вам может подойти нечто вроде disruptor`а - этий кольцевой массив событий, который обрабатывает несколько консьюемров, причем могут сразу пачкой(если логика позволяет).
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827350
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasarзабыл никMolasar, очевидно разобью на маленькие части. один элемент массива - одна задача
А если данные нужно сохранить в БД. Например, 100000 строк.
Вы будете под запись каждой строки выделять поток?

так это вы все еще про запись в бд что ли? Не поборол?
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827357
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasarзабыл никMolasar, очевидно разобью на маленькие части. один элемент массива - одна задача
А если данные нужно сохранить в БД. Например, 100000 строк.
Вы будете под запись каждой строки выделять поток?
Начинаешь задавать правильные вопросы.

К тем пунктам что добавил Озверин, ты должен решить задачу написав функцию, которая принимает на вход int(число элементов в массиве) и вычисляет другой int(количество элементов в партитишене), учитывая коээфициенты -
1) количество потоков в системе
2) CPU или IO-bound таск. При CPU-bound коэффийиент должен быть строго 1, при IO - от 2-5 обычно, но надо мерять на реальной нагрузке
3) минимальное количество элементов на один таск, ибо если у тебя мало элементов, то нету особого смысла параллелить.
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39827363
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39828981
Фотография Мозговой_слизень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevСамое загадочное - это ответ
Т.к. ArrayList наиболее правильно бьется просто на 13-ть ArrayList'ов
И тогда все получившиеся ArrayList'ы будут не просто максимально, а совершенно точно "равны по количеству элементов"

5 баллов! ИМХО просто шедеврально. И главное, укладывается в "условия задачи".
Но можно пойти еще дальше. Зачем нам 13-ть ArrayList'ов, зачем память засирать. Лучше пусть будет 1. Таким, образом, мы пришли к выводу, что задачу решать вообще не имеет смысла. Можно считать ее решенной уже на этапе постановки.

Зачем подниматься на 3-ий этаж и спускаться на первый, если по условиям задачи нужно быть на первом. Можно просто не подниматься.
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39828982
Фотография Мозговой_слизень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingLeonid KudryavtsevСамое загадочное - это ответ
Т.к. ArrayList наиболее правильно бьется просто на 13-ть ArrayList'ов
И тогда все получившиеся ArrayList'ы будут не просто максимально, а совершенно точно "равны по количеству элементов"

наверняка неявно подразумевается что минимальное количество элементов в каждом из разбитых 2

Нельзя ли уточнить. А то так придешь к врачу, он тебе так неявно не то лекарство даст и неявно откинешься.
...
Рейтинг: 0 / 0
Разбить ArrayList на максимально равные по количеству элементов части
    #39829086
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
офигенный пример того, почему на любой заданный вопрос нужно отвечать вопросом "объясни, зачем это нужно"
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Разбить ArrayList на максимально равные по количеству элементов части
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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