全排列问题:设R={r1, r2, …, r3}是要进行排列的n个元素,Ri = R – {ri}。集合X中元素的全排列记为Perm(X)。(ri)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri,得到的排列。
因此,R的全排列可以归纳定义如下:
1)当n=1时,Perm(R) = (r),其中r是集合R中唯一的元素;
2)当n>1时,Perm(R)由:(r1)Perm(R1),(r2)Perm(R2),…,(rn)Perm(Rn)构成。
我们据此设计递归算法如下:
#include <iostream>
/**
* 功能描述:交换两个数的值
* 参数:
* a---数一
* b---数二
*/
template<typename T>
void swap(T &a, T &b)
{
T temp = a;
a = b;
b = temp;
}
/**
* 功能描述:全排列
* 参数:
* data[]---待排列的数组
* k---开始排列的元素在数组中的下标
* m---结束排列的元素在数组中的下标
*/
template<typename T>
void ASCEPerm(T data[], int k, int m)
{
//产生data[k:m]的所有排列
if(k == m)//单元素排列,递归的结束条件
{
for(int i=0; i<=m; i++)
{
std::cout<<data[i];
}
std::cout<<std::endl;
} else {
for(int i=k; i<=m; i++)
{
swap(data[k], data[i]);
ASCEPerm(data, k+1, m);
swap(data[k], data[i]);
}
}
}
int main()
{
int data[] = {1, 2, 2};
ASCEPerm<int>(data, 0, 2);
system("pause");
return 0;
}
算法Perm(data, k, m)递归地产生所有前缀是data[0:k-1],且后缀是data[k:m]的全排列的所有排列。函数调用Perm(data, 0, n-1)则产生data[0:n-1]的全排列。
在一般情况下,k<m。算法将data[k:m]中每一个元素分别与data[k]中元素交换;然后递归计算data[k+1:m]的全排列,并将计算结果作为data[0:k]的后缀。
分享到:
相关推荐
递归与分治策略是学习计算机算法设计与分析的基础,掌握了这样的思想才能良好地高效率地去解决一些问题
c语言分治法求众数重数-五大常见算法策略之——递归与分治策略,算法数据结构 五大常用算法
在一个2的k次方乘以2的k次方个方格的棋盘中,恰有一个方格与其他方格不同为特殊方格,棋盘称为特殊棋盘,用4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。
算法设计与分析实验报告:递归与分治策略,用python写的,附源码。主要处理问题如下: 1.ackerman函数实现; 2.大数划分; 3. 数据集合{1,2,3,4,5,6,7,8,9,10}的排列组合;
对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止
本资源是从众多学生中选取出来的优秀范例,运行效率较高,包含完整可执行代码和详细算法...范例中包含了士兵战队,集合划分等5个基于递归与分治策略算法实现的问题,每个范例都有详尽代码和算法分析PPT!学习的好材料。
递归与分治实验(二)Problem A:再次Hanoi塔问题Problem B:输油管道问题Problem C:Integer FactorizationProblem D:邮局选址问题Problem E:Gray code
计算计算法课件。递归与分治的思想以及几个经典问题
理解递归的概念 掌握设计有效算法的分治策略:分治法的基本思想 通过范例学习分治策略的算法分析及设计技巧 二分搜索技术、大整数的乘法、Strassen矩阵乘法 合并排序和快速排序
1. 编程实现整数的划分问题的递归算法 3. 编程实现特殊棋盘覆盖问题的求解
算法思想——递归与分治 算法思想——递归与分治
算法中的递归与分治策略,这是老师上课的讲课的时候用的PPT,觉得不错!
实现并验证合并排序算法; Ex2:实现并验证快速排序算法 Ex3:用递归与分治的方法设计并实现寻找第k小元素算法
这是一个相当齐全的算法课件 里面包含了很多的内容和实例 使我们上课时老师的课件 希望对大家有帮助
算法分析与设计课程作业,递归与分治C代码,可以运行的代码
本程序包括递归与分治算法章节课后习题中的内容的集合,方便简单易懂,对刚学算法的人帮助很大,这是我们这学期的三道作业题合在一起的程序。
计算机算法递归与分治策略PPT课件.pptx