【发布时间】:2011-03-31 20:32:26
【问题描述】:
以f(x,y,z) 的形式,其中x 是给定的整数和,y 是序列的最小长度,z 是序列的最大长度。但是现在让我们假设我们正在处理一个固定长度的序列,因为否则我会花很长时间来写这个问题。
所以我们的函数是f(x,r),其中x 是给定的整数和,r 是可能序列列表中序列的长度。
对于x = 10 和r = 2,这些是可能的组合:
1 + 9
2 + 8
3 + 7
4 + 6
5 + 5
让我们在 Python 中将其存储为对列表:
[(1,9), (2,8), (3,7), (4,6), (5,5)]
所以用法如下:
>>> f(10,2)
[(1,9), (2,8), (3,7), (4,6), (5,5)]
回到最初的问题,在(y,x) 范围内为每个长度返回一个序列。我采用前面定义的f(x,y,z) 形式,省略了长度为1(其中y-z == 0)的序列,如下所示:
>>> f(10,1,3)
[{1: [(1,9), (2,8), (3,7), (4,6), (5,5)],
2: [(1,1,8), (1,2,7), (1,3,6) ... (2,4,4) ...],
3: [(1,1,1,7) ...]}]
所以输出是字典列表,其中值是对列表。不完全是最优的。
所以我的问题是:
- 是否已经有一个库可以处理这个问题?
- 如果没有,有人可以帮我编写我提到的两个函数吗? (先固定序列长度)?
- 由于我对相当琐碎的数学知识存在巨大差距,您能否忽略我的整数存储方法并使用最有意义的任何结构?
对今天所有这些算术问题感到抱歉。谢谢!
【问题讨论】:
-
输出是一个元组列表
-
您真的需要生成完整的序列列表吗?这似乎有点笨拙(更不用说慢了)......也许更好的看待这个的方法是编写一个函数
g(sum, nterms, index),它返回所有长度为nterms的序列的排序列表的indexth序列总和为sum。我认为这会更容易——而且我强烈怀疑它最终会是递归的。 -
现在输出的是字典列表,这是我的初衷。
-
你想要一个随机序列还是所有序列?标题或描述都需要更改。
-
开枪,对不起。我可以自己做一些随机的事情。
标签: python math permutation combinations