全排列生成器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全排列生成器相关的知识,希望对你有一定的参考价值。

给定n≥1个元素的集合,问题是输出这个集合中所有元素的排列。例如:如果集合是{ a, b, c },那么,这个集合元素的全排列为:{ (a,b,c), (a,c,b), (b,a,c), (b,c,a), (c,a,b), (c,b,a) }。容易看出,如果给定的集合中有n个元素,那么就有n!个不同的排列。通过下面的例子可以看出算法的简单思路:集合有四个元素,(a,b,c,d),答案可以这样构造:
1. a后接(b, c, d)的排列
2. b后接(a, c, d)的排列
3. c后接(a, b, d)的排列
3. d后接(a, b, c)的排列

可见,如果能生成n – 1个元素的全排列,就能生成n个元素的全排列。

python源码:

 1 # -*- coding: cp936 -*-
 2 # 存放元素的数组、参与排列的第一个元素的位置以及数组中元素的个数
 3 def sort(A,k,n):
 4     global count
 5     if k >= n:
 6         print A[:n]
 7         count += 1
 8     else:
 9         for i in range(k,n):
10             A[k], A[i] = A[i], A[k]
11             sort(A, k +1, n)
12             A[k], A[i] = A[i], A[k]
13 
14 count = 0
15 A = [a,b,c,d]
16 sort(A, 0,len(A))
17 print count  # 全排列个数
18 
19 count = 0
20 A = [1,2,3]
21 sort(A, 0,len(A))
22 print count

 

以上是关于全排列生成器的主要内容,如果未能解决你的问题,请参考以下文章

C语言数字全排列的问题(急!!)求C代码和算法

递归解决全排列生成算法

全排列生成器

多重全排列的生成与构造

生成可重集的排列

递归函数生成全排列