组合算法
本程序的想法是打开数组,其下标表示从1到m的个数,数组元素的值为1表示其下标
将检查代表数量,如果为0,则不检查代表数量。
首先初始化,将数组的前n个元素放在1上,指示第一个组合是前n个。
然后,从左向右扫描数组元素的值“10”组合,找到第一个“10”组合,并将其更改为
在组合“01”的同时,将其左侧的所有“1”移动到数组的左端。
当最初"1"移动到数组的m-n的位置、即n个"1"全部移动到右端时
到了最后的组合。
例如,求出5中3的组合:
1110//1、2和3
101010//1,2,4
01110//1,3,4
01110//2,3,4
10001//1、2和5
10101//1,3,5
01101//2、3和5
10011//1,4,5
1011//2、4和5
0111//3、4和5
使用python实现:
组=[ 1,1,1,0,0,0 ]
group _ len=len (组)
#计算次数
ret=[group]
ret _ num=(group _ len * (group _ len-1 ) * ) * (group_len - 2 ) )/6
forIinxrange(ret_num-1 ) :
"第一步:先把10换成01."
number1_loc=group.index(1)。
number0_loc=group.index(0) )。
#替换位置从前0个位置开始
location=number0_loc
判断第#1个0和第1个1的位置中的哪一个先,
#最初0的位置小于最初1的位置时,
#那么,置换位置从前一个位置的后面查找
if number0_loc number1_loc:
location=group [ number1_loc : ].index (0) number1_ loc
组[位置]=1
组[位置-1]=0
'步骤2 :将前10个前面的所有1放在数组的最左边'
if位置-3=0:
if group [ location-3 ]==1and group [ location-2 ]==1:
组[位置-3]=0
组[位置-2]=0
组[0]=1
组[1]=1
elif group[location - 3]==1:
组[位置-3]=0
组[0]=1
elif group[location - 2]==1:
组[位置-2]=0
组[0]=1
打印组
ret.append (组)
全数组算法
从1到n,输出全部排列,一共n! 酒吧。
分析:用n进制的方法吧。 设置n个单元格的数组,对第一个单元格执行加法操作,使其满n进制
一。 每次添加时,判断各数组单元格有无重复,如果有,则返回进行添加操作。 没有
表明得到了数组方案。