算法分析--排列问题

原创 2015年11月19日 16:51:34

算法分析–排列问题

[排列问题]
问题描述:设R={r1,r2,r3,……,rn}是要进行排列的n个元素,Ri=R-{ri}.集合X中元素的全排列记为Perm(X)。(r1)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的排列。R的全排列可以归纳定义如下:
1. 当n=1时,Perm(R)=(r),其中Perm(R)=(r),其中r是结合R中唯一的元素;
2. 当n>1时,Perm(R)由(r1)Perm(R1),(r2)Perm(R2),……,(rn)Perm(Rn)构成。

实现的递归算法如下(c++实现):
#include
using namespace std;

inline void Swap(int &a,int &b){
int t;
t=a;
a=b;
b=t;
}
void Perm(int list[3],int k,int m){
if(k==m){
for(int i=0;i<=m;i++)
cout < < list[i];
cout < < endl;}
else
for(int i=k;i<=m;i++)
{Swap(list[k],list[i]);
Perm(list,k+1,m);
Swap(list[k],list[i]);
}
}
int main(){
int list[3]={1,2,3};
Perm(list,0,2);
return 0;
}

分析:

  1. 在k=0时,i=0,交换list[0]和list[0],(相当于未发生交换),进入第一轮递归Perm(list,1,2);
  2. 此时k=1,i=1,交换list[1]和list[1],(相当于未发生交换),进入Perm(list,2,2),打印输出123;第一个全排列结果输出;跳出Perm(list,2,2),交换list[1]和list[1];
  3. 进入k=1时,循环发生,i=2(因为i在第2步时已=1,进入for循环,i=2),交换list[1]和list[2],进入Perm(list,2,2);打印输出结果132;跳出Perm(list,2,2),交换list[1]和list[2];跳出循环,因为i=2,所以跳出Perm(list,1,2),交换list[0]和list[0];
  4. 此时k=0,i=1,交换list[0]和list[1],进入Perm(list,1,2);
  5. 此时k=1,i=1,交换list[1]和list[1],(相当于未发生交换),进入Perm(list,2,2),打印输出213;第三个全排列结果输出;跳出Perm(list,2,2),交换list[1]和list[1];
  6. 进入k=1时,循环发生,i=2(因为i在第2步时已=1,进入for循环,i=2),交换list[1]和list[2],进入Perm(list,2,2);打印输出结果231;跳出Perm(list,2,2),交换list[1]和list[2];跳出循环,因为i=2,所以跳出Perm(list,1,2),交换list[0]和list[0];
  7. 重复4-6步骤。

实验结果:
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

算法分析与设计中的全排列问题

  • 2009年03月28日 10:52
  • 29KB
  • 下载

【算法设计与分析】递归与分治----2.4 排列问题

直接或者间接调用自己的算法叫做递归算法,《算法设计与分析》一书中举了几个例子,这里我们对其中一些例子进行了分析,并给出了详细的代码: 例 2.4 排序问题 算法思路: 1)n个元素的全排列 = (n-...

算法分析之有重复元素的排列问题O(n!)

#include #include #include using namespace std; template void quicksort(vector& a, int left, int ri...

全排列问题算法分析与实现(递归、非递归)

若有数字集合{1,2,3},则其全排列为123、132、213、231、321、312。现给定字符数组,求其字符的全排列。实现了递归与非递归两种方法。...

分治算法求全排列问题

  • 2015年10月27日 20:02
  • 472B
  • 下载

算法分析 背包问题

  • 2014年05月11日 14:51
  • 524B
  • 下载

算法java实现--回溯法--电路板排线问题--排列树

电路板排线问题的java实现(回溯法--排列树) 具体问题描述以及C/C++实现参见网址 http://blog.csdn.net/liufeng_king/article/details...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法分析--排列问题
举报原因:
原因补充:

(最多只允许输入30个字)