码迷,mamicode.com
首页 > 其他好文 > 详细

全排列生成器

时间:2017-11-26 16:52:10      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:color   问题   参与   输出   nbsp   n个元素   range   pytho   count   

给定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

 

全排列生成器

标签:color   问题   参与   输出   nbsp   n个元素   range   pytho   count   

原文地址:http://www.cnblogs.com/immersion/p/7899211.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!