Java алгоритм для нарезки списка - PullRequest
0 голосов
/ 07 апреля 2011

Я пытаюсь нарезать список (вызвать этот входной список, и он содержит элементы двойного типа данных Java) на несколько частей (подсписки).Размер подсписков может быть неравным по небольшому количеству.Каждая часть (подсписок) служит входом для другой программы.Размер входного списка - это переменная с максимальным размером 10000, т. Е. Она может быть как 1 или 2 или 3, так и 100 или 10000 или любое число меньше 10000.

Что лучшеспособ нарезать такой список на несколько частей?Я рассматривал распределение 3h + 1 Дональда Кнута при проектировании промежутков для сортировки оболочки.Однако я не уверен, будет ли это уместно.Ценю твою помощь.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 07 апреля 2011

Чтобы раскрыть в ответе оптимальное значение M,

Предположим, что существует некоторая функция стоимости C, связанная с обработкой списка размера M.

Затем вы хотите минимизировать функцию

TotalCost = M * C (N / M) + накладные расходы

, где накладные расходы - это стоимость разделения списка.

Я думаю, что для большинства приложений не было быбольшая разница для разных значений M, поэтому нет смысла разбивать их на части.

Ситуация, в которой это было бы полезно, если у вас несколько процессоров, и вы можете передавать списки другим процессорам.В этом случае функция стоимости была бы больше похожа на

TotalCost = C (N / M) + накладные расходы, если M <число процессоров </p>

, поэтому вы должны выбрать M, чтобы быть близким, но меньшимчем количество процессоров.

2 голосов
/ 07 апреля 2011

Если я не понимаю этот вопрос, это кажется легким.

Дан список размером N, для создания M подсписков, где M

  1. создать списки M-1 размера K = N / M
    (округление вниз)
  2. создать список размер M - (M - 1) * K

Тогда

  1. скопировать первые K элементов в первый список
  2. скопировать следующие K элементов в второй список,
  3. и т. Д.,
  4. наконец, скопируйте последний M - (M - 1) * K в последний список.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...