当前位置:  编程技术>c/c++/嵌入式

算法之排列算法与组合算法详解

    来源: 互联网  发布时间:2014-10-27

    本文导语:  1. 前言 本文介绍了常用的排列组合算法,包括全排列算法,全组合算法,m个数选n个组合算法等。 2. 排列算法 常见的排列算法有: (A)字典序法 (B)递增进位制数法 (C)递减进位制数法 (D)邻位对换法 (E)递归法 介绍常用的两...

1. 前言

本文介绍了常用的排列组合算法,包括全排列算法,全组合算法,m个数选n个组合算法等。

2. 排列算法

常见的排列算法有:
(A)字典序法
(B)递增进位制数法
(C)递减进位制数法
(D)邻位对换法
(E)递归法

介绍常用的两种:

(1) 字典序法

对给定的字符集中的字符规定了一个先后关系,在此基础上按照顺序依次产生每个排列。

[例]字符集{1,2,3},较小的数字较先,这样按字典序生成的全排列是:123,132,213,231,312,321。

生成给定全排列的下一个排列 所谓一个的下一个就是这一个与下一个之间没有字典顺序中相邻的字符串。这就要求这一个与下一个有尽可能长的共同前缀,也即变化限制在尽可能短的后缀上。

算法思想:

设P是[1,n]的一个全排列。
P=P1P2…Pn=P1P2…Pj-1PjPj+1…Pk-1PkPk+1…Pn , j=max{i|PiPj} ,对换Pj,Pk,将Pj+1…Pk-1PjPk+1…Pn翻转, P'= P1P2…Pj-1PkPn…Pk+1PjPk-1…Pj+1即P的下一个

例子:839647521的下一个排列.

从最右开始,找到第一个比右边小的数字4(因为45>2>1),再从最右开始,找到4右边比4大的数字5(因为4>2>1而4 m) { for(i = 0; i 0。 /// b[1..M]用来存储当前组合中的元素(这里存储的是元素下标), /// 常量M表示满足条件的一个组合中元素的个数,M=m,这两个参数仅用来输出结果。 void combine( int a[], int n, int m, int b[], const int M ) { for(int i=n; i>=m; i--) // 注意这里的循环范围 { b[m-1] = i - 1; if (m > 1) combine(a,i-1,m-1,b,M); else // m == 1, 输出一个组合 { for(int j=M-1; j>=0; j--) cout


    
 
 

您可能感兴趣的文章:

  • 一种求正整数幂的高效算法详解
  • 深入串的模式匹配算法(普通算法和KMP算法)的详解
  • 解析C#彩色图像灰度化算法的实现代码详解
  • 使用Deflate算法对文件进行压缩与解压缩的方法详解
  • 深入第K大数问题以及算法概要的详解
  • 字符串的模式匹配详解--BF算法与KMP算法
  • 采用C++实现区间图着色问题(贪心算法)实例详解
  • 算法详解之分治法具体实现
  • C语言位图算法详解
  • 算法详解之回溯法具体实现
  • 基于一致性hash算法(consistent hashing)的使用详解
  • 算法详解之分支限界法的具体实现
  • C语言实现排序算法之归并排序详解
  • 基于稀疏图上的Johnson算法的详解
  • 基于一致性hash算法 C++语言的实现详解
  • 深入N皇后问题的两个最高效算法的详解
  • 使用C++实现全排列算法的方法详解
  • 全排列算法的原理和实现代码
  • C#实现排列组合算法完整实例
  • 体育彩票排列三组选三算法分享
  • 请教一个关于得到一个时间段内,按星期排列的日期的算法,请近来看看哦
  • 深入全排列算法及其实现方法
  • 全排列算法的非递归实现与递归实现的方法(C++)
  • C语言实现的排列组合问题的通用算法、解决方法
  • 关于各种排列组合java算法实现方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • <<大话数据结构>>中冒泡排序算法改进
  • boost unordered_map和std::list相结合的实现LRU算法 iis7站长之家
  • 二叉树常用算法(求总节点个数和叶子节点个数)
  • 求对称加密DES算法与非对称加密RSA算法!(可用)
  • boost unordered_map和std::list相结合的实现LRU算法
  • java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
  • 中文网页快速去重算法研究
  • 谁能给出一个最快最高效的求素数的算法?(高分求算法)
  • 使用java jdk中的LinkedHashMap实现简单的LRU算法
  • 谁有这样的算法:给定两个区域,用直线或折线来连接,以及移动其中线段的算法。
  • 广告系统中weak-and算法原理及编码验证
  • 算法之排序算法的算法思想和使用场景总结
  • c++实现MD5算法代码示例
  • 【算法】扑克发牌算法实现
  • c语言实现MD5算法完整代码示例
  • php加密算法之实现可逆加密算法和解密分享
  • MD5算法的C语言实现
  • C++实现查找中位数的O(N)算法和Kmin算法
  • PHP中对各种加密算法、Hash算法的速度测试对比代码
  • 关于加密算法的效率问题
  • 哈希算法计算 Generic Hash and HMAC Program


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3