sum(xi)= 10、0 < = xi < = 2、i = 1,2、...、10.とするとxiのすべての整数解を求める。ありがとうございました。私はEuclideanアルゴリズムについて読んだことがありますが、2つの未知の変数のように見えます。ここではどのようなアルゴリズムを使用できますか?sum(xi)= b、線形制約付きのすべての整数解を見つける方法
答えて
再帰が最適です。あなたが最初にメモリに長いリストを作成する必要はありませんということで発電機の
def solutions(variables, sum_left, max_value):
if 0 == variables:
if 0 == sum_left:
yield []
else:
for i in range(0, max_value + 1):
if sum_left < i:
break
else:
for partial_solution in solutions(variables - 1, sum_left - i,
max_value):
yield [i] + partial_solution
for x in solutions(10, 10, 2):
print(x)
利益:ここでは発電機との自然なPythonのソリューションです。ここでは、発電機を使用せず、リストを構築することを避ける別の解決法があります。
def do_something_for_solutions(variables, sum_left, max_value, known=None):
if known is None:
known = []
if 0 == variables:
if 0 == sum_left:
do_something(known)
else:
for i in range(0, max_value + 1):
if sum_left < i:
break
else:
do_something_for_solutions(variables - 1, sum_left - i,
max_value, known + [i])
def do_something(solution):
print(solution)
do_something_for_solutions(10, 10, 2)
あなたが解決策を返却することを選択した場合、次のように、それが可能である:
def solutions(variables, sum_left, max_value):
if 0 == variables:
if 0 == sum_left:
return [[]]
else:
return []
else:
answer = []
for i in range(0, max_value + 1):
if sum_left < i:
break
else:
for partial_solution in solutions(variables - 1, sum_left - i,
max_value):
answer.append([i] + partial_solution)
return answer
for x in solutions(10, 10, 2):
print(x)
(あなたはパラメータを変更した場合、そのリストは簡単に巨大になることができると警告したことが...)
ありがとうございました! – daydayup
は、各整数パーティションは最大10重量部で
- を有し番号100、のinteger partitionsの順列を探しています。そして
- 各部分は、最大で15
例多くは確かにありますが、10です!それらはコンピュータによってまだ管理可能です。
編集:OPはそう、質問を編集した:あなたは本当にすべてのソリューションを持っているしたい場合は番号10は、各部分が、せいぜい2
ありがとうございました! – daydayup
で高々10部、との整数のパーティションに分割する必要があります:再帰的にいくつかの最適化と可能なすべての変数の割り当てを列挙:
- 最後の変数の値は、部分的な割り当てがもはや導くことができないことを見たときに検索が、剪定することができ、和制約
- から計算することができます有効な解に変換する(例えば、合計が既に大きい場合n 10または10の合計に到達する変数が少なすぎる場合)
ありがとう! – daydayup
- 1. 制約付きの置換の集合を見つける
- 2. 三角形、正方形、円の下の整数点の数を見つける
- 3. 最大公約数を見つけるための線形時間アルゴリズム
- 4. 整数制約の最適化問題を解決する
- 5. 線の交点矩形 - 交点を見つける方法?
- 6. Cプログラムで(すべての)整数オーバーフローを見つける方法は?
- 7. PostgreSQLの制約を見つける
- 8. 文化のデフォルトの日付形式を見つける方法
- 9. 整数配列の三つ組を見つける方法
- 10. MySQLフルテキストインデックス付きのすべてのテーブルを見つける
- 11. デフォルトの制約の制約をすべてテーブルにドロップする方法
- 12. ポジティブスロープでラインを形成することができるポイントのペアの数を見つける方法は?
- 13. 2つの光線の法線の交差を見つける
- 14. Scipy NNLS関数解に制約を含める方法1
- 15. Pythonのテキスト内で整数のすべての出現を見つける
- 16. 整数解a + b + c = 2
- 17. 整数フィールドにない最小値を見つける方法
- 18. FK制約付きMySQL/InnoDB:カスケード削除の影響を受けるテーブル/行を見つけよう
- 19. Javaを使用してファイルから整数の型を見つける方法
- 20. 任意の数値の正の整数を見つける方法
- 21. アルゴリズム - 1つの変数で線形方程式を解く
- 22. ボクセルサーフェスの法線を見つける方法
- 23. トポロジカルソートのすべての結果を見つける方法
- 24. 整数の等しくないパーティションを見つける効率的な方法
- 25. 制限付き行のSUMとGROUP
- 26. 整数を整数で見つけるコマンドは何ですか?
- 27. すべての依存DLLを見つける方法
- 28. すべてのデータベース参照を見つける方法
- 29. JQueryですべてのダイアログを見つける方法
- 30. asp.netアプリケーションを微調整してボトルネックを見つける方法
あなたの例には非常に多くの解決策がありますが、それらをすべてリストすることはおそらく興味深いものではありません。あなたは本当に解決しようとしていますか? – Henry
例:解決策を見つけたり、解決策を探したりしたいのですか? –
私は本当にソリューションのすべての組み合わせを見つける必要があります。目的をモデル化するのが難しく、制約が隠されているので、すべての組み合わせが得られ、bruteforcefulllyがベストを見つける最適化問題を解決しています。 – daydayup