2013_11_14:递归算法(2)—全排列
2013-11-15 00:08
169 查看
3.经典例题
设R = {r1,r2,r3......rn}是要进行排列的n个元素,Ri = R-{ri}。集合X中元素的全排列记为Perm(X)。(ri)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的排列。R的全排列可归纳定义如下:
当n = 1时,Perm(R) = (r),其中r是结婚R中唯一的元素。
当n > 1时,Perm(R)由(r1)Perm(R1),(r2)Perm(R2)......(rn)Perm(Rn)构成。其实这就是一个递归过程,拿(r1)Perm(R1)来说,全排列Perm(R1) = Perm( {r2,r3,r4.....rn})之后再在所有排列之前加上r1就可以了,其中{r2,r3,r4.....rn}又是一个新的集合,可以由(r2)Perm({r3,r4....rn}),(r3)Perm({r2,r4....rn})......表示,一直递归下去,直到最后Perm({rx})也就是只剩下一个元素时全排列也就是自己了rx,然后再逐步返回加上前面的前缀,这就是(r1)Perm(R1)。
template <class Type>
void Perm(Type list[] int prefix,int length)
{
if(prefix == length)//it means there is an element
{
for(int i=0;i<=length;++i)
cout<<list[i]<<endl;//print the value of list
}else{
for(int j = prefix;j<=length;++j)
{
exchange(list[prefix],list[j]);//exchange the value of list[prefix] and list[j]
Perm(list,perfix+1,length);
exchange(list[prefix],list[j]);
}
}
}
设R = {r1,r2,r3......rn}是要进行排列的n个元素,Ri = R-{ri}。集合X中元素的全排列记为Perm(X)。(ri)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的排列。R的全排列可归纳定义如下:
当n = 1时,Perm(R) = (r),其中r是结婚R中唯一的元素。
当n > 1时,Perm(R)由(r1)Perm(R1),(r2)Perm(R2)......(rn)Perm(Rn)构成。其实这就是一个递归过程,拿(r1)Perm(R1)来说,全排列Perm(R1) = Perm( {r2,r3,r4.....rn})之后再在所有排列之前加上r1就可以了,其中{r2,r3,r4.....rn}又是一个新的集合,可以由(r2)Perm({r3,r4....rn}),(r3)Perm({r2,r4....rn})......表示,一直递归下去,直到最后Perm({rx})也就是只剩下一个元素时全排列也就是自己了rx,然后再逐步返回加上前面的前缀,这就是(r1)Perm(R1)。
template <class Type>
void Perm(Type list[] int prefix,int length)
{
if(prefix == length)//it means there is an element
{
for(int i=0;i<=length;++i)
cout<<list[i]<<endl;//print the value of list
}else{
for(int j = prefix;j<=length;++j)
{
exchange(list[prefix],list[j]);//exchange the value of list[prefix] and list[j]
Perm(list,perfix+1,length);
exchange(list[prefix],list[j]);
}
}
}
相关文章推荐
- 2013_11_13:递归算法(1)
- 2013 11 14
- 跟我学SharePoint 2013视频培训课程—— 版本控制以及内容审批(14)
- JZOJ3232. 【佛山市选2013】排列
- 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8
- 2013 duilib入门简明教程 -- 部分bug (11)
- 2013 11 24电脑操作
- 数据结构——双向循环链表——2016_11_14
- 16-11-14总结
- 全排列递归算法
- 2013-14红军利物浦赛季总结
- 原创:全排列非递归算法:微软给出的算法
- 使用VMware 11 虚拟机安装Ubuntu 14
- HDU'14’11'校赛 Harmonious Contest
- 递归算法--如何一步一步理解递归(2)--全排列
- 2013-14 排序算法
- 听道笔记-04-14-2013《圣洁,与众人和睦》-唐崇荣
- Informix IDS 11琐细打点(918检修)认证指南,第 7 部分: IDS复制(14)
- 全排列算法之Perm递归算法实现
- 14-9-11 C/C++课程设计--图书馆管理系---<time.h>中时间数据类型的学习记录