Я должен быть ржавым, потому что не могу найти решение.
Скажем, у нас есть 3 списка слов:
list1 list2 list3
----- ----- -----
pizza red child
pasta green man
apple blue adult
pear yellow old
Мне нужно выбрать подмножества из каждого списка, например:
- Сумма всех выбранных секций будет возвращать каждую возможную комбинацию из всего списка (например, pizza-red-child или pizza-red-man)
- Дубликатов нет, поэтому, если выбранный раздел 1 содержит одну комбинацию, я не хочу, чтобы какой-либо другой набор включал ее
- Выбранные разделы должны иметь определенный минимальный размер (определенный как количество элементов 1 * количество 2 * и т. Д.)
- Мне нужно иметь минимальное количество выбранных разделов
Теперь тривиальное решение, конечно, скажем, вам пришлось разделить этот список на 4 на 4 рабочих (то, что я называю выбранным разделом выше), просто отправить каждую комбинацию, начиная с пиццы, рабочему 1, макароны 2 и так далее. , Но это не сработает, если у вас больше работников, чем элементов в вашем самом длинном списке, и все становится сложнее.
Редактировать - Пример
Итак, цель дана в списке, найти все комбинации. Но вам нужно разбить основную работу на несколько машин.
Тривиальное решение, описанное выше, состоит в том, что у вас 4 элемента в самом длинном списке, просто используйте 4 машины. В этом случае это будет выглядеть так:
Машина 1:
list1 list2 list3
----- ----- -----
pizza red child
green man
blue adult
yellow old
Машина 2:
list1 list2 list3
----- ----- -----
red child
pasta green man
blue adult
yellow old
Машина 3:
list1 list2 list3
----- ----- -----
red child
green man
apple blue adult
yellow old
Машина 4:
list1 list2 list3
----- ----- -----
red child
green man
blue adult
pear yellow old
Однако это не сработает, если вам придется разделить работу на большее количество машин, чем на количество элементов в самом длинном списке. В этом случае, скажем, вам нужно разделить работу на 8 машин (или 4 машины на два раунда на машину), это должно выглядеть так (я использовал 8, поскольку это упрощает пример, но фактическое число не таково). хорошо).
Машина 1:
list1 list2 list3
----- ----- -----
pizza red child
green man
adult
old
Машина 2:
list1 list2 list3
----- ----- -----
red child
pasta green man
adult
old
Машина 3:
list1 list2 list3
----- ----- -----
red child
green man
apple adult
old
Машина 4:
list1 list2 list3
----- ----- -----
red child
green man
adult
pear old
Машина 5:
list1 list2 list3
----- ----- -----
pizza child
man
blue adult
yellow old
Машина 6:
list1 list2 list3
----- ----- -----
child
pasta man
blue adult
yellow old
Машина 7:
list1 list2 list3
----- ----- -----
child
man
apple blue adult
yellow old
Машина 8:
list1 list2 list3
----- ----- -----
child
man
blue adult
pear yellow old
Как видите, это способ разбить исходный список, чей максимальный элемент составляет 4 на 8 машин. Вопрос в том, как программно сделать это, когда вы не можете контролировать количество машин / количество элементов в списке?