【问题标题】:How to iterate over a range of permutations? [duplicate]如何迭代一系列排列? [复制]
【发布时间】:2017-01-16 22:50:24
【问题描述】:

假设您有 n 项目,每个项目的范围从 1 到 100。我怎样才能了解范围内所有可能的变化?

例子:

3 stocks A, B and C

努力寻找可能的投资组合分配。

A - 0     0   0            1    2          1    1
B - 0     1   2      ...   0    0    ...   1    2
C - 100   99  98           99   98         98   97

寻找一种有效的方法来获得所有可能结果的矩阵。

总和应为 100,并涵盖n 元素的所有可能变化。

【问题讨论】:

  • 这是一个非常不清楚的问题......你是说你想要 1 到 100 之间的三个数字的所有排列,使得三个数字的总和等于 100?
  • @mgilson 是的,这是正确的。我会更新问题。寻找一种有效的方法来处理它。对于n 数字,显然
  • 3SUM problem 在非零和变体中?
  • 这听起来像是你在尝试暴力破解一个问题,通过为它获取一个更复杂的库可以更好地解决这个问题。
  • 我觉得你的问题在这里stackoverflow.com/questions/13988197/…有答案。

标签: python


【解决方案1】:

我会怎么做:

>>> import itertools
>>> cp = itertools.product(range(101),repeat=3)
>>> portfolios = list(p for p in cp if sum(p)==100)

但这会产生不必要的组合。请参阅整数分区的讨论以避免这种情况。例如,Elegant Python code for Integer Partitioning

【讨论】:

  • 这是 O(N^3) -- 当您应该能够在大约 5000 次迭代(N = 100)中提出解决方案时,这将需要 100 万次迭代。
  • 使用代码行的数量效率很高。
  • @mgilson 同意。这就是我提供整数分区链接的原因。
猜你喜欢
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 2020-05-13
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多