При этом создаются все возможные комбинации путем выбора из пула 0, пула 0 и пула 1.
Однако порядок для меня это не имеет значения, поэтому многие комбинации на самом деле являются дубликатами. Например, поскольку я использовал декартово произведение, генерируются оба числа (1, 2, 4) и (2, 1, 4).
Я придумал простой способ решить эту проблему. Для участников, выбранных из одного пула, я выбираю без упорядочивания, используя комбинации_с_заменой. Я считаю, сколько раз я хочу взять деньги из каждого пула. Код выглядит следующим образом:
cnt = Counter()
for ind in part: cnt[ind] += 1
blocks = [combinations_with_replacement(pools[i], cnt[i]) for i in cnt]
return [list(chain(*combo)) for combo in product(*blocks)]
Это уменьшает количество дубликатов, если мне приходится выбирать из одного и того же пула несколько раз. Однако все пулы во многом перекрываются, и использование groups_with_replacement при объединении нескольких пулов приведет к созданию некоторых недопустимых комбинаций. Есть ли более эффективный метод создания неупорядоченных комбинаций?
Изменить: Дополнительная информация о входных данных: количество частей и пулов невелико (~ 5 и ~ 20), и для простоты каждый элемент является целым числом. Реальную проблему я уже решил, так что это просто ради академического интереса. Допустим, в каждом пуле тысячи сотен целых чисел, но некоторые пулы малы и содержат только десятки. Так что какой-то союз или пересечение, кажется, лучший вариант.
При этом создаются все возможные комбинации путем выбора из пула 0, пула 0 и пула 1.
Однако порядок для меня это не имеет значения, поэтому многие комбинации на самом деле являются дубликатами. Например, поскольку я использовал декартово произведение, генерируются оба числа (1, 2, 4) и (2, 1, 4).
Я придумал простой способ решить эту проблему. Для участников, выбранных из одного пула, я выбираю без упорядочивания, используя комбинации_с_заменой. Я считаю, сколько раз я хочу взять деньги из каждого пула. Код выглядит следующим образом:
[code]cnt = Counter() for ind in part: cnt[ind] += 1 blocks = [combinations_with_replacement(pools[i], cnt[i]) for i in cnt] return [list(chain(*combo)) for combo in product(*blocks)] [/code]
Это уменьшает количество дубликатов, если мне приходится выбирать из одного и того же пула несколько раз. Однако все пулы во многом перекрываются, и использование groups_with_replacement при объединении нескольких пулов приведет к созданию некоторых недопустимых комбинаций. Есть ли более эффективный метод создания неупорядоченных комбинаций?
Изменить: Дополнительная информация о входных данных: количество частей и пулов невелико (~ 5 и ~ 20), и для простоты каждый элемент является целым числом. Реальную проблему я уже решил, так что это просто ради академического интереса. Допустим, в каждом пуле тысячи сотен целых чисел, но некоторые пулы малы и содержат только десятки. Так что какой-то союз или пересечение, кажется, лучший вариант.
Я пытаюсь создать программное обеспечение, чтобы помочь организовать Mixed Padel Tourments, чтобы сделать это, я создаю функцию, которая генерирует раунды. Игроки X (x as evel), функция должна генерировать раунд матчей X/2, причем ни один игрок не...
Последние несколько дней я пытался найти алгоритм, который поможет мне найти максимальное количество уникальных комбинаций на основе списка одобренных комбинаций.
Каждая комбинация представляет собой набор из 1..n элементов. (элементы не должны...
Я пишу алгоритм, который обнаруживает области смежных пустых ячеек, которые полностью окружены заполненными ячейками и не доходят до края сетки. Назовем такие регионы «пулами».
Как вы можете видеть на приведенной ниже визуализации, существует три...