동전을 n 번 던지면 (n = 10), 2^10 = 1024 개의 가능한 결과가 있습니다. I는 N = 10 개의 모든 가능한 결과를 얻기 위해 파이썬 3에서 반복 프로세스를 큰 크기로 확장하는 방법
lst = [list(i) for i in itertools.product([0, 1], repeat=n)]
사용하고 난 경화의 동일한면의 최대 연속 시퀀스로서 정의되는 기 (m)의 숫자를 찾을. 예를 들어, HHHTTHTTHT,이 결과에 대한 그룹의 수는 (HHH) (TT) (H) (TT) (H) (T) 인 6입니다. 나는 투기 된 동전의 각각의 대응하는 조합에 대한 그룹 (m)의 수를 알아 내기 위해
group=[len([len(list(grp)) for k, grp in groupby(x)]) for x in lst]
을 사용했다. 마지막으로, 그러나 이러한 가능한 조합 그룹의 수가 6 (m)보다 큰 경우의 수
Group6=len(list(filter(lambda x:x>m,group)))
를 얻을 때 토스 증가 수, 예를 들면, (N = 200, m = 110) 또는 (n = 500, m = 260). 파이썬에서 위와 같은 코드를 사용했지만 시간이 많이 걸렸습니다. 파이썬의 메모리 크기를 초과했다고 생각합니다. 누군가가 n과 m이 상당히 큰 경우이 문제를 해결하는 방법을 찾아 내도록 도와 줄 수 있습니까? 가능한 모든 토스를 통해 감사
처음에는'group'과'lst'에 대한리스트 이해 대신에 generator expression을 사용할 수 있습니다. 이 값들을 필요로하지 않는다면 반복자를리스트에 구체화해서는 안됩니다. –
** 토스를 실제로 생성 할 필요가 없습니다 ** : 산술 및 수학적 분석은 이것을 조합 문제로 줄입니다. –
그러나 위의 내용은 사용자의 메모리 사용에 도움이 될 것입니다. 본질적으로 솔루션을 강압적으로 사용하고 있기 때문에 조합 폭발이 발생할 것입니다 ... 그렇습니다. 수학을 사용합니까? –