利用递归算法解决排列问题
发布时间
阅读量:
阅读量
一、排列问题
设R={r1,r2,...,rn}为需要进行排列操作的n个元素组成的集合,Ri=R-{ri}表示从R中移除元素ri后得到的子集。对于集合X中的元素,其所有可能排列方式可记作Perm(X)。
将前缀ri添加到全排列Perm(X)中每个排列的前面,所形成的排列形式可表示为(ri)Perm(X)。
关于集合R的全排列,其生成规则可以归纳如下:
当n=1时,Perm(R)=(r),其中r代表集合中唯一的那个元素;
当n>1时,Perm(R)由(r1)Perm(R1),(r2)Perm(R2),(r3)Perm(R3)...(rn)Perm(Rn)共同组成。
实现原理在于:通过将数组中的每一个数值与第一个位置上的数值进行交换,从而确保每次计算的是后续n-1个数的全排列(实际上,这一过程等同于依次将数组中的每个元素置于首位,并对剩余的n-1个元素进行全排列运算)。
【示例

根据递归原理,Perm(R)的递归算法设计方式如下:
#include <iostream>
using namespace std;
全部评论 (0)
还没有任何评论哟~
