Jupyter застрял

#jupyter-notebook

#jupyter-ноутбук

Вопрос:

У меня есть следующий код:

Код

Код просто зависает, когда я ввожу n = 6, (в jupyter) Я не знаю, что делать, пожалуйста, помогите.

 n=int(input("Enter a number to experiment:"))
l=[]
w=[]
nw=[]
c=0
for i in range(2*n):
 if(i<n):
   l.append(0)
 else:
   l.append(1)

import itertools as it
permset=set([i for i in it.permutations(l)])
for x in permset:
  w.append(x)
print (w)
for j in range(len(w)):
  c=1

   for y in range(2*n-1):

      if(w[j][y]==w[j][y 1]):
         c=c
      else:
         c=c 1

nw.append(c)
print(nw)
from collections import Counter
Counter(nw)
  

Комментарии:

1. Какова ваша конечная цель?

2. Я хочу запустить это для различных n и понять, как частоты 1,2 и т.д. в nw зависят от n

3. Этот код написан для решения задачи в комбинаторике…

4. «Явление, когда всего несколько входных данных приводят к большому количеству результатов, называется комбинаторным взрывом, и это то, что следует иметь в виду при работе с combinations(), combinations_with_replacement() и permutations()» источник

Ответ №1:

Проблема заключается в вызове itertools.permutations . Он вычисляет все возможные упорядочения ранее построенного массива, который при N = 6 равен:

 [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1]
  

Я полагаю, что это вернет (12!) = 479001600 элементов, которые ваш код затем преобразует в набор для удаления дубликатов. Конечно, это никогда не заходит так далеко, но если бы это произошло, я полагаю, что 479001600 элементов были бы преобразованы в набор всего из 924 элементов.

Не уверен, какова ваша цель, но, возможно, то, что вам нужно для этой части, — это способ сгенерировать этот набор из 924 элементов без создания большего списка, в котором много дубликатов. Насколько я понимаю, эта часть кода создает набор массивов размером (2 * n), где ровно половина элементов равна 0, а половина — 1.

Комментарии:

1. Да, я понимаю… Спасибо, я постараюсь найти более простой выход