- 5
- 0
- 约1.7万字
- 约 4页
- 2017-08-10 发布于河南
- 举报
划分算法 - 排列问题
分治算法——排列问题
2011-08-05 15:10:52| 分类: HYPERLINK /blog/#m=0t=1c=fks_084064087094080075081086082095085081080071092084083074083分治算法 |字 jm号大中小 订阅
设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列。
分析:设R={r 1,r2,…,rn}是要进行排列的n个元素,Ri=R-{ri}。 ,集合X中元素的全排列记为perm(X)。其中(ri)perm(X)表示在全排列perm(X)的每一个排列前加上前缀得到的排列。R的全排列可归纳定义如下:
当n=1时,perm(R)=(r),其中r是集合R中唯一的元素;
当n1时,perm(R)由(r1)perm(R1),(r2)perm(R2),…,(rn )perm(Rn)构成。
思路是递归产生前缀是list[0:k-1],且后缀是list[k:m]的全排列的所有排列。……算法将list[k:m]中每一个元素分别与list[k]中元素交换。然后递归地计算list[k+1:m]的全排列,并将计算结果作为list[0:k]的后缀。
1)切记Perm(list,k,m)是产生从k开始到m结束的所有全排列,这个很重要。要产生所有全排列,只要调用这个函数就行了,至于这个函数怎么实现,先不要去管。(一开始理解
原创力文档

文档评论(0)