コインをn回(n = 10)投げた後、2^10 = 1024の結果が出る可能性があります。 Iは、n = 10のすべての可能な結果を得ることが Python 3で反復処理を大規模に拡張する方法
lst = [list(i) for i in itertools.product([0, 1], repeat=n)]
を使用し、私はコインの同じ側の最大連続配列として定義されるグループ(M)の数を知りたいです。たとえば、HHHTTHTHTHTHTの場合、この結果のグループ数は6であり、(HHH)(TT)(H)(TT)(H)(T)です。使用した10個の投げ玉の組み合わせごとのグループ数(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)。私はまだPythonで上記と同じコードを使用しましたが、時間がかかり、Pythonのメモリサイズを超えていると思います。誰かが、nとmがかなり大きいとき、この問題に対処する方法を理解するのを助けてくれますか?おかげ
初心者は、 'group'と' lst'のリスト理解の代わりにジェネレータ式を使うことができます。これらの値が必要でない限り、イテレータをリストにマテリアライズするべきではありません。 –
実際にトーセンス**を生成する必要はありません**:算術と数学的分析はこれを組み合わせ問題に還元します。 –
しかし、上記はあなたのメモリ使用量にのみ役立ちます。本質的には、あなたがあなたのソリューションを無理やり強制しているので、コンビナトリアル爆発に遭遇するでしょう...そうです。数学を使う? –