高效的排列生成算法

原创 2007年10月05日 21:07:00

 

 本算法与上一篇的组合生成算法是一体的,也是在维普上看到的。我用C++实现如下:

#include <cstdlib>
#include 
<iostream>
#include 
<iterator>

using namespace std;
      
void  Permutation( int n )...{
    
int *A=new int[n+1], *B=new int[n+1], i=0, j;
    
for( j=1; j<=n; ++j )
         A[j]
=j, B[j]=0
    
while( i!=n+1  )...{
        copy(A
+1,A+n+1,ostream_iterator<int>(cout," "));  
        cout
<<endl;
        
for( i=2; i<=&& B[i]>=i-1 ; ++i );
        
++B[i];
        
if( i&1 )   swap( A[i], A[1] );
        
else        swap( A[i], A[B[i]] );
        
for( j=1; j<=i-1++j )
            B[j]
=0;
    }

    delete []A;    delete []B;
}

                    
int main(int argc, char *argv[])...
    Permutation( 
4 );
    system(
"PAUSE");
    
return EXIT_SUCCESS;
}

终于有个高效率的排列组合算法

1。最近一直在考虑从m个数里面取n个数的算法。最容易理解的就是递归,但是其效率,实在不能使用。一直找寻中,今日得果2。算法来源与互联网组合算法     本程序的思路是开一个数组,其下标表示1到m个数,...
  • MaybeHelios
  • MaybeHelios
  • 2006年05月28日 21:54
  • 16480

全排列生成算法(二)

Steinhaus-Johnson-Trotter算法是一种基于最小变换的全排列生成算法,对于排列a[1...n],该算法通过将a[i],与a[i-1](或a[i+1])进行交换,生成下一个排列,直到...
  • joylnwang
  • joylnwang
  • 2011年12月15日 14:34
  • 4800

算法--生成1~n的排列

在暴力求解法中,我们常常要用上枚举一些简单内容以便方便获得解,若要输出整数n的前n个整数的全排列,则按字典序输出为: (1,2,3),(1,3,2),(2,1,3),(2,3,1),(3,1,2),(...
  • hhhzua
  • hhhzua
  • 2015年04月05日 19:54
  • 781

排列生成算法--字典序法

本文地址: 所谓字典序法就是按照字典排序的思想逐一产生所有排列。比如1,2,3,4四个数字进行全排列,先1234, 1243,1324,1342,1423,1432,…4321。 由1243生成132...
  • spch2008
  • spch2008
  • 2013年07月30日 21:24
  • 1271

Johnson_Trotter 生成排列算法

const int N = 10; int f[N],d[N]; void init(int n) { for(int i=1; i
  • acm_BaiHuzi
  • acm_BaiHuzi
  • 2015年10月23日 16:55
  • 708

高效率的全组合算法(Java版实现)

算法描述:   算法说明:当n大于2时,n个数的全组合一共有(2^n)-1种。 当对n个元素进行全组合的时候,可以用一个n位的二进制数表示取法。 1表示在该位取,0表示不取。例...
  • u011393661
  • u011393661
  • 2014年07月19日 15:15
  • 926

全排列的生成算法:字典序法

http://blog.sina.com.cn/s/blog_4cd4ffc401018x7r.html 全排列的生成算法 对于给定的字符集,用有效的方法将所有可能的全排列无重复...
  • kuailexiaoziwqx
  • kuailexiaoziwqx
  • 2016年08月14日 21:00
  • 1272

全排列的算法(八)——序数法

全排列的生成算法(八)——序数法   n个元素的全排列有n!个,如果将排列按顺序编号,并能够按照某种方法建立起每一个序号与一个排列之间的对应关系,那么就可以根据序号确定排列,反过来也可以根据排列确...
  • BabyNumber
  • BabyNumber
  • 2015年03月12日 09:19
  • 1730

生成全排列算法详解

递归+回溯+SWAP。字典序
  • Dafang_Xu
  • Dafang_Xu
  • 2015年10月17日 17:20
  • 1981

Steinhaus-Johnson-Trotter 生成全排列算法

Steinhaus-Johnson-Trotter算法是一种基于最小变换的全排列生成算法,对于排列a[1...n],该算法通过将a[i],与a[i-1](或a[i+1])进行交换,生成下一个排列,直到...
  • kalilili
  • kalilili
  • 2015年01月10日 00:43
  • 1302
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:高效的排列生成算法
举报原因:
原因补充:

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