我正在寻找一种有效的方法来实现这一目标:
您有一个数字列表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),并且它们似乎总是对单个字符串或数字进行操作…。
任何人都有一个很棒的,不错的’n’n’quick算法?
谢谢!
只需增加一个二进制数并取与设置的位相对应的元素。
例如,00101101将意味着采用索引0、2、3和5的元素。由于列表仅为1..n,因此元素仅为索引+ 1。
00101101
这将产生有序的排列。换句话说,只会{1, 2, 3}生成。没有{1, 3, 2}或{2, 1, 3}或{2, 3, 1}等
{1, 2, 3}
{1, 3, 2}
{2, 1, 3}
{2, 3, 1}