【问题标题】:Calculate Sum of numbers with all possible combination [closed]计算所有可能组合的数字总和[关闭]
【发布时间】:2013-10-06 04:58:00
【问题描述】:

如果有一定的数 x0 和 xn+1 ,并且如果 xi 是一个整数 0

sum 表示对所有可能的情况取 f(x1,x2,...xn) 的总和(x1,x2,...xn) 的组合使得不等式成立。不等式是 x01 2 n+1

我有一个解决方案的想法,但它是一种使用二进制的非常无效的算法,它是 O(2n)。当然,我不能使用“for”,因为它必须用于 n(非特定)次。

例如,

如果给定是x1 = 1,并且xn+1是x3 = 5,那么可能的组合是

  • x1=1, x2=2, x3=5
  • x1=1, x2=3, x3=5
  • x1=1, x2=4, x3=5

总和应该计算所有这 3 个可能值集的总和。

有没有人知道更有效的算法?

【问题讨论】:

  • 你能解释一下这个算法应该做什么。也许在 sudo 代码中。或段落
  • 那么“sum(x_0
  • 这里的堆栈溢出不好玩
  • 该算法应该计算函数 f 与 n 个变量 x_1,x_2,x_3,...x_n 的值之和,这些变量的所有可能组合满足 x_0
  • 好的,什么是函数f

标签: java algorithm variables iteration combinations


【解决方案1】:

解决此问题的方法是将其视为尝试在minmax 之间查找n 数字的所有组合。随时添加它们

您可以想象n 石头在minmax 之间的数字线上,然后移动最右边的石头直到它达到最大值,当它是你将下一个最右边的石头向上移动一个位置并移动所有石头都在它的右边。

请参阅此示例,其中 n=4、min=2 和 max=11

此算法将确保您获得所有组合。

因此,考虑到该算法,您可以编写函数

boolean[] getNextCombinations(boolean[] currentCombination) //which would advance to the next value (and probably return null when there are no more combinations)

int scoreCombinations(boolean[] currentCombination, int min, int max) //which would add up a particular combination

【讨论】:

  • 谢谢。你的图表对我应该如何设计程序帮助很大。这比我的快得多,所以我现在没有任何问题。
  • 太棒了,很高兴我能帮上忙
猜你喜欢
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多