【发布时间】:2010-07-23 15:20:40
【问题描述】:
我正在寻找一种有效的方法来实现这一目标:
-
您有一个数字列表 1.....n(通常:1..5 或 1..7 左右 - 相当小,但可能因情况而异)
您需要这些数字的所有长度的所有组合,例如只有一个数字的所有组合 ({1}, {2}, .... {n}),然后是两个不同数字的所有组合 ({1,2}, {1,3}, {1,4} 。 .... {n-1, n} ),然后是其中三个数字({1,2,3},{1,2,4})的所有组合,依此类推
基本上,在组内,顺序是无关紧要的,因此 {1,2,3} 等价于 {1,3,2} - 只需从该列表中获取所有 x 个数字组
似乎应该有一个简单的算法来解决这个问题 - 但到目前为止我已经徒劳无功了。大多数组合学和置换算法似乎 a) 考虑了顺序(例如 123 不等于 132),并且它们似乎总是对单个字符串或数字进行操作......
任何人都有一个很棒的,nice'n'quick 算法??
谢谢!
【问题讨论】:
-
您基本上是在寻找列表中的Power Set(如果它的所有项目都是唯一的,那么它在数学上实际上是一个集合)。
标签: c# algorithm combinatorics