У меня есть 10 переменных, и я должен заполнить их 1 или -1, как мне перечислить все возможные случаи? - PullRequest
2 голосов
/ 04 октября 2019

Я работаю над математической задачей, касающейся аранжировки мужчин и женщин. Есть 5 пар, и мы знаем, что каждая пара сидит рядом друг с другом, каждый мужчина сидит напротив женщины. Если я хочу представлять мужчину или женщину с +1 или -1 и хочу найти список всех возможных результатов и распечатать их, как мне это сделать?

Должен ли я использовать 10Для петель? Есть ли более простой способ, которым я мог бы сохранить результаты в массиве?

PS Математический вопрос не ограничен тем, что я здесь написал, я хочу решить его самостоятельно (извините), но я хотел бычтобы понять проблему, которую я выделил выше. Если возможно, покажите мне небольшой фрагмент, чтобы указать мне правильный путь.

Ответы [ 3 ]

1 голос
/ 04 октября 2019

Наиболее «эффективный» или «простой» способ генерации всех способов получения 10 чисел, содержащих 1 или -1, зависит от языка. У Python очень простой и быстрый способ. Вот выражение, которое создает генератор, который делает это. Сначала выполните команду

import itertools

, чтобы получить то, что вам нужно, в ваше пространство имен, затем выражение:

itertools.product((1, -1), repeat=10)

Например, для работы со всеми этими кортежами из 10 чисел, которые вы можете сделать:

import intertools

for mytuple in itertools.product((1, -1), repeat=10):
    # Process mytuple

Если вы не знакомы с Python, каждый «кортеж», созданный для цикла цикла, в основном эквивалентен массиву.

0 голосов
/ 04 октября 2019

Если порядок не имеет значения, существует одиннадцать решений: по одному на каждое возможное число -1 в списке вывода. Чтобы перечислить их, выполните цикл от 0 до 10 (включительно), а затем цикл от 1 до 10 (включительно), сначала печатая число -1, равное значению внешнего счетчика, затем печатая 1 до конца внутреннего цикла.

Если порядок имеет значение, простое рекурсивное решение - начать с пустого буфера и нулевой позиции. Затем на каждом уровне добавьте -1 и 1, по очереди, к текущей позиции, рекурсивно заполняя оставшуюся часть буфера, увеличивая позицию в каждом вызове. Когда позиция равна длине буфера (следовательно, буфер заполнен), вы можете распечатать содержимое буфера и завершить рекурсию. Это O (n2 ^ n) время и O (n) пространство, где n - длина буфера. Если переполнение стека становится проблемой, попробуйте переписать это с помощью итерации и стека, чтобы самостоятельно управлять стеком вызовов.

0 голосов
/ 04 октября 2019

Проверьте Набор питания , чтобы сгенерировать все возможные подмножества набора.

Есть много способов создать это, но вы заявили, что хотите это выяснить.

Эта ссылка с сайта math.stackexchange.com представляется актуальной

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...