x1+x2+x3+…+xm=N
各xi>=Lを満たす整数の組をすべて列挙したいのですが、
pythonでとにかく高速に列挙するにはどうしたらよいですか
m,N,Lは整数
(例)
x1+x2+x3=4 xi>=0
[4,0,0]
[3,0,1]
[3,1,0]
[2,0,2]
[2,1,1]
[2,2,0]
[1,0,3]
[1,1,2]
[1,2,1]
[1,3,0]
[0,0,4]
[0,1,3]
[0,2,2]
[0,3,1]
[0,4,0]
モジュールは使わない前提でしょうか?
m,N,Lの範囲はどれくらいですか?
meg_さん
モジュール使ってもありです。
わたしはitertools.combinations_with_replacement
というのをつかって要素を数えるみたいなことをしたのですが、
効率悪いことしているのではないかと思いました。
otsuki_kさん
L,m,Nに関しては引数として
Lにかんしては0以上の整数
m,Nにかんしては1以上の整数
と想定しています。
整数の組の数は(N-m*L+m-1)C(m-1)個なので、
たとえばN=50、m=25、L=0でも1,000,000,000,000,000,000個以上列挙することになります。
詳しくは組み合わせ爆発で検索してください
それを本当にすべて列挙したいのですか?
重複組み合わせの考え方で組み合わせが増えるのはわかりますが、
すべて列挙したいです。
さすがにN=50まではない想定ですが、
組合せ最適化みたいなことにとりくんでいて、
全部列挙して最適解を出すのにどれくらいかかるのかためしたいのです。
ご回答ありがとうございました
効率が悪いと、ご自分で思われているコードを、提示していただけますか?
あなたの回答
tips
プレビュー