我正在尝试编写一个脚本来确定是否可以将一个整数值分解为一个整数列表。我的方法是在recursivley中搜索有效的因子分解,effectiveley在可能的因子树中执行DFS(在下面的代码中)。有没有可能做一个贪婪的算法,找到这个快?我的想法是继续在列表中搜索余数中最大的因子,直到找到有效的因子分解。在这种情况下,这是正确的算法吗?如果不是,这个问题是NP问题吗?在
用Python编写的解决问题的代码: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和list[2,3,5,8],算法应该返回True,因为30=2*3*5。不需要使用列表中的所有元素,因为因子可以多次使用。在