私は、整数リストの整数値を因数分解できるかどうかを判断するスクリプトを作成しようとしています。私がやったやり方は、有効な因子分解のためにrecursivleyを検索することです。有効な要素のツリー内でDFSを実行します(下記のコードを参照)。これは速く見つける貪欲なアルゴリズムを作ることは可能ですか?私の考えは、有効な因数分解が見つかるまで、残りの部分で最大の要素を探し続けることでした。この場合正しいアルゴリズムでしょうか?もしそうでなければ、NPでこの問題はありますか?整数リストの整数を因数分解する
Pythonで書かれた問題解決するためにコード:EDIT
def can_factorize_in_list(n, list):
# Determines whether it is possible to factorize 'n' in 'list'
# Filter the list to only include the values which are factors
fac_list = [p for p in list if (n % p is 0)]
for x in fac_list:
if n % x is 0:
if n/x is 1:
# If we end up at 1, we have a valid factorization
return 1 # End state
else:
# If we do not end at 1, keep trying
if can_factorize_in_list(n/x, fac_list):
return 1
else:
continue
return 0
を:例えば、指定された整数30とリスト30 = 2ため、[2,3,5,8]、アルゴリズムがtrueを返します* 3 * 5。因子と因子を複数回使用できるので、リストのすべての要素を使用する必要はありません。
整数を整数リストで「因数分解」するとはどういう意味ですか?通常の解釈は、整数がリストの要素であり、整数を因数分解したいだけなので(リストも問題ではありません)、それはあなたが言うことではないようです。要因はリストから来る必要がありますか?もしそうなら、要素を再利用できるか? – user2357112
'n%x is 0'を再確認する必要はありません。あなたの 'fac_list'はすでにそれらの値をフィルタリングしました。また、 'else:continue'も不要です。そして、もしあなたが 'n/xが1ならば、can_factorize_in_list(n/x、fac_list):return True'と書き直すことができます。そして、 '0' /' 1'ではなくブーリアン値を返すようにしてください。それはあなたのコードをより綺麗にし、よりハッキリにします。 –
リストから要素が来る必要があります。因子は複数回使用することもできます。 – Meldrin