在php中查找min和max之间的所有数字组合

时间:2018-05-15 06:15:01

标签: php combinatorics

我正在试图找出最优化的代码,它将找到X和Y之间的组合列表,如下所示:

  • A = 4
  • B = 6
  • C = 3
  • D = 5
  • E = 4
  • F = 1

让我们说X = 7,Y = 16

因此找到其总和大于或等于X且小于或等于Y的所有组合。可以重复这些值。

那是:

  • AA
  • AAA
  • AAAA
  • ABA
  • ABB
  • ABC
  • ...
  • EE
  • EEE
  • EEEE
  • EA
  • EAA

......等等

最终条件:不应包括重复安排。例如,ABB与BBA和BAB相同。所以不应该包括后两者。

我正在尝试为此找到最优化的代码,因为输入列表最多可包含200个数字......

1 个答案:

答案 0 :(得分:0)

您需要做的事情:

  1. 环绕我们所有的字母组合
  2. 按字母顺序排列组合,以便我们可以找到重复项。例如ABB与BAB相同-请参见https://stackoverflow.com/a/9912497/897266
  3. 如果重复,则将其标记为此类或将其排除-参见https://stackoverflow.com/a/10096034/897266
  4. 计算每个组合值-参见https://stackoverflow.com/a/49181225/897266
  5. 比较每个组合值,以确认它在我们的最小/最大范围内-参见https://stackoverflow.com/a/4684064/897266
  6. 如果要保留它,否则将其标记为不包含或排除
  7. 循环后,输出通过测试且不是重复的组合集

我可以用php编写全部内容,但我希望这是足够的指导,可以给您带来战斗的机会。