Algorithm 生成和算法
我必须为算法建立一个代码。我必须用我的算法实现以下目标: 我有三个数字,4,6,8。我必须用其中两个数字生成和,然后用其中三个数字生成和,然后用四个数字生成和,以此类推。当然,在这个例子中也可以有类似的副本:4+4+6 我有了使用“for”循环的想法,所以其中两个数字的和可以通过两个嵌套的for循环生成。三个嵌套的“for”循环将给出三个数字的和等 我可以通过使用“for”来约束这个解决方案,例如直到五个数字的总和,但这不是一个通用的解决方案 有什么方法、算法或数学方法可以做到这一点吗Algorithm 生成和算法,algorithm,loops,math,sum,Algorithm,Loops,Math,Sum,我必须为算法建立一个代码。我必须用我的算法实现以下目标: 我有三个数字,4,6,8。我必须用其中两个数字生成和,然后用其中三个数字生成和,然后用四个数字生成和,以此类推。当然,在这个例子中也可以有类似的副本:4+4+6 我有了使用“for”循环的想法,所以其中两个数字的和可以通过两个嵌套的for循环生成。三个嵌套的“for”循环将给出三个数字的和等 我可以通过使用“for”来约束这个解决方案,例如直到五个数字的总和,但这不是一个通用的解决方案 有什么方法、算法或数学方法可以做到这一点吗 数学组合
数学组合学有一个相似之处。你可以从一个数学公式推导出你的解 不同之处在于,在您的情况下,您可以有重复项,并且似乎有一个子集的最大大小
internet上提供了许多实施方案。您可以从一个应用程序派生您的解决方案 不同之处在于,在您的情况下,您可以有重复项,并且似乎有一个子集的最大大小
internet上提供了许多实施方案。您可以从一个应用程序派生您的解决方案 不同之处在于,在您的情况下,您可以有重复项,并且似乎有一个子集的最大大小
internet上提供了许多实施方案。您可以从一个应用程序派生您的解决方案 不同之处在于,在您的情况下,您可以有重复项,并且似乎有一个子集的最大大小 internet上有很多实现。这是的一种变体,假设您的元素都是小整数,则可以在伪多项式时间内使用动态规划有效地求解
f(0,i) = true
f(x,i) = false if n < 0
f(x,i) = f(x,i-1) OR f(x-arr[i],i-1)
这个答案假设子集的大小没有限制-如果有,可以通过向表中添加另一个维度来完成
运行时是O(sum(arr)*n)这是的一种变化,假设您的元素都是小整数,可以在伪多项式时间内使用动态规划有效地求解
f(0,i) = true
f(x,i) = false if n < 0
f(x,i) = f(x,i-1) OR f(x-arr[i],i-1)
这个答案假设子集的大小没有限制-如果有,可以通过向表中添加另一个维度来完成
运行时是O(sum(arr)*n)这是的一种变化,假设您的元素都是小整数,可以在伪多项式时间内使用动态规划有效地求解
f(0,i) = true
f(x,i) = false if n < 0
f(x,i) = f(x,i-1) OR f(x-arr[i],i-1)
这个答案假设子集的大小没有限制-如果有,可以通过向表中添加另一个维度来完成
运行时是O(sum(arr)*n)这是的一种变化,假设您的元素都是小整数,可以在伪多项式时间内使用动态规划有效地求解
f(0,i) = true
f(x,i) = false if n < 0
f(x,i) = f(x,i-1) OR f(x-arr[i],i-1)
这个答案假设子集的大小没有限制-如果有,可以通过向表中添加另一个维度来完成
运行时间是O(总和(arr)*n)对于任何给定数量的术语,您只需要两个循环。假设您想要n个值的总和。对于任何给定的和,都有n8乘以8,n6乘以6,n4乘以4,其中n8+n6+n4=n。要生成所有可能的组合,您只需要在n8和n6上循环,n4的值可以从中计算出来。在Python中:
def findsums(n):
# n8 = [0..n]
for n8 in range(n+1):
#n6 = [0..n-n8]
for n6 in range(n+1-n8):
n4 = n - n8 - n6
# build the string consisting of n terms
s = "+8" * n8 + "+6" * n6 + "+4" * n4
# print, and strip the first '+' character
print( "{0}={1}".format( s[1:], 8*n8+6*n6+4*n4 ) )
findsums(5)
对于任何给定数量的术语,您只需要两个循环。假设您想要n个值的总和。对于任何给定的和,都有n8乘以8,n6乘以6,n4乘以4,其中n8+n6+n4=n。要生成所有可能的组合,您只需要在n8和n6上循环,n4的值可以从中计算出来。在Python中:
def findsums(n):
# n8 = [0..n]
for n8 in range(n+1):
#n6 = [0..n-n8]
for n6 in range(n+1-n8):
n4 = n - n8 - n6
# build the string consisting of n terms
s = "+8" * n8 + "+6" * n6 + "+4" * n4
# print, and strip the first '+' character
print( "{0}={1}".format( s[1:], 8*n8+6*n6+4*n4 ) )
findsums(5)
对于任何给定数量的术语,您只需要两个循环。假设您想要n个值的总和。对于任何给定的和,都有n8乘以8,n6乘以6,n4乘以4,其中n8+n6+n4=n。要生成所有可能的组合,您只需要在n8和n6上循环,n4的值可以从中计算出来。在Python中:
def findsums(n):
# n8 = [0..n]
for n8 in range(n+1):
#n6 = [0..n-n8]
for n6 in range(n+1-n8):
n4 = n - n8 - n6
# build the string consisting of n terms
s = "+8" * n8 + "+6" * n6 + "+4" * n4
# print, and strip the first '+' character
print( "{0}={1}".format( s[1:], 8*n8+6*n6+4*n4 ) )
findsums(5)
对于任何给定数量的术语,您只需要两个循环。假设您想要n个值的总和。对于任何给定的和,都有n8乘以8,n6乘以6,n4乘以4,其中n8+n6+n4=n。要生成所有可能的组合,您只需要在n8和n6上循环,n4的值可以从中计算出来。在Python中:
def findsums(n):
# n8 = [0..n]
for n8 in range(n+1):
#n6 = [0..n-n8]
for n6 in range(n+1-n8):
n4 = n - n8 - n6
# build the string consisting of n terms
s = "+8" * n8 + "+6" * n6 + "+4" * n4
# print, and strip the first '+' character
print( "{0}={1}".format( s[1:], 8*n8+6*n6+4*n4 ) )
findsums(5)
是的,您可以使用递归。将示例输入包含在完整的预期输出中可能也很有帮助,这样您就可以100%清楚地了解您要做的事情。如果您考虑到x+x+x+…+x(n次)=x*n,您可能能够避免递归并提高性能。@n.m.要避免递归,您需要做的远不止这些,因为它不能解决5+3=4+4的问题。为了跟进我之前的评论(要求提供预期的输出,但仍应提供),您是否希望实际生成所有的总和,即4、6、8、4+4、4+6、4+8、6+6、6+8、8+8等。?如果是这样的话,你是想要唯一的和,所有的和,还是想要输出组成和的实际数字?(也就是说,4+8=6+6,那么您想打印“4+8”和“6+6”,还是一次打印“12”,或两次打印“12”?)当然有重复的总和。我计划删除重复的金额,只保留不同的金额。但这是这一过程的第二步。我想,生成所有可用的总和,将它们放入数组中,然后删除重复项。更简单。是的,你可以使用递归。将示例输入包含在完整的预期输出中可能也很有帮助,这样您就可以100%清楚地了解您要做的事情。如果您考虑到x+x+x+…+x(n次)=x*n,您可能能够避免递归并提高性能。@n.m.要避免递归,您需要做的远不止这些,因为它不能解决5+3=4+4的问题。为了跟进我之前的评论(要求提供预期的输出,但仍应提供),您想实际生成所有