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